我正试图将我的网站升级到最新的,或者至少是更新的PHP版本。通过我的网站,我收到内部服务器错误消息。有些是一致的,每次访问页面时都会发生。尽管采取了同样的行动,但其他人还是断断续续。我正在努力解决至少一个错误,希望在解决所有其他错误中站稳脚跟
持续产生内部服务器错误的代码:
try {
global $dbCon;
$stmt = $dbCon->prepare("SELECT pdf_template, ai_template, id_template, img_template FROM products WHERE sku=:s ");
$stmt->execute(array(':s' => $sku)); //Failure occurs on this line
$result = $stmt->fetch(PDO::FETCH_ASSOC); //This is never reached
//$stmt->bindValue(':sku',$sku,PDO::PARAM_STR);//Attempted alternate form of binding
//$stmt->execute(); //Alternate binding still failed here
} catch (PDOException $e) {
$logger->warn("Database call failed, was unable to gather product templates", "pricing modal", "sku: $sku");
}
正如您从我的评论中看到的,$stmt->execute(array(':s' => $sku));
行始终是罪魁祸首。若它被注释掉,页面仍然加载。更具体地说,如果我放入$stmt->execute();
,则执行该语句,并且页面仍然加载(当然,减去DB所需的内容)。因此,在PHP尝试将变量绑定到准备好的语句的过程中,似乎出现了故障。这也适用于bindValue()
。任何时候绑定以前执行的值都会失败。
我已经尝试了很多方法在日志中获得某种类型的输出。例如页面顶部的
error_reporting(E_ALL);
ini_set( 'display_errors','1');
ini_set("log_errors", 1);
ini_set("error_log", "/tmp/php-error.log");
error_log( "Hello, errors!" );
在.htaccess:中
php_flag log_errors on
php_value error_log /tmp/php-error.log
我尝试过对以前的代码进行各种排列,试图在日志文件中产生错误。是的,有些是多余的,我非常渴望得到答案。是的,‘你好,错误!"确实出现在日志文件中。
造成这一切的原因是:网站在PHP 5.3上运行得非常好。这是它开发的版本。(我知道,应该在新版本上开发它。我有以前无法控制的逻辑原因)当我将版本提高到5.4或5.5时,我会出现内部服务器错误。有人能提供一些关于这个主题的见解和更深层次的知识吗。非常感谢。
EDIT:$dbCon声明:
try{
$dbCon = new PDO('mysql:host=mysql.example.com;dbname=db_sandbox',$db_user,$db_password, array(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
));
} catch( PDOException $e ) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
@rjdown我以前做过,我只是再次做了一次,并显示了一个实际的修复程序。删除ob_start()
是因为标头的发送顺序不正确这修复了那个页面
现在我仍然在其他地方收到内部服务器错误。现在出现不同的错误。涉及特定于我的服务器的glibc错误,超出了这个特定问题的范围。