我有一段代码来查询数据库并返回结果。代码工作正常,然后在更新sqlite数据库后,PHP代码保持不变,我得到500内部服务器错误。
如果我在行" $ count ++"之后返回,则不会发生此错误。因此,错误是在while循环的第二次或更多次迭代中引起的。
我还可以确认查询是有效的 - 我能够使用Python SQLite API离线查询和返回数据。
听起来数据库已损坏。数据库花费了30多个小时来填充数据,所以我想知道是否有可以绕过这个,或以其他方式修复数据。
*注意 - $ this-> db是扩展SQLite3类的实例。
function getFeatureFrequencySeries($product_id, $feat) {
$ret = array();
$scope = "product_id = " . $product_id . " AND feature = '" . $feat . "'";
$result = $this->db->query("SELECT score, weighted_score, frequency, start_date FROM features WHERE " . $scope . " ORDER BY start_date");
$count = 0;
while ($res = $result->fetchArray(SQLITE3_ASSOC)) {
$norm = (float)$this->getNormFactor($product_id, $res['start_date']);
$ret[] = array('score' => (int)$res['score'], 'weighted_score' => (int)$res['weighted_score'], 'frequency' => (int)$res['frequency'], 'norm_factor' => $norm, 'date' => $res['start_date']);
$count++;
}
return $ret;
}
function getNormFactor($product_id, $start_date){
$scope = "product_id = " . $product_id . " AND start_date = '" . $start_date . "'";
$result = $this->db->query("SELECT sum(frequency) as revcount FROM features WHERE " . $scope . " GROUP BY start_date");
if ($res = $result->fetchArray(SQLITE3_ASSOC)){
return (float)$res['revcount'];
} else {
return 0;
}
}
在PHP脚本的顶部,我有:
error_reporting(-1); // reports all errors
ini_set("display_errors", 'On'); // shows all errors
ini_set("log_errors", 1);
ini_set("error_log", "[FULLPATH_IS_HERE]/missing.html");
在我的.htaccess中:
# enable PHP error logging
php_flag log_errors on
php_flag display_errors 1
php_value error_log [FULLPATH_IS_HERE]/missing.html
日志中没有任何内容。
结果:
内部服务器错误
服务器遇到内部错误或配置错误,无法完成>您的请求。
请与服务器管理员webmaster@trendminingdesign.net联系,并告知他们错误发生的时间,以及您可能做过的任何可能导致>错误的事情。
服务器错误日志中可能提供了有关此错误的更多信息。
此外,尝试使用ErrorDocument>处理请求时遇到404 Not Found错误。