PHP 5.4.11上的PDO :: execute(array())上的内部服务器错误

时间:2014-10-22 22:06:27

标签: php mysql pdo internal-server-error

我正在尝试将我的网站升级到最新版本,或者至少是新版本的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

我尝试了以前代码的各种排列,试图在日志文件中产生错误。是的,其中一些是多余的,我迫不及待地想要一个答案。是的,'Hello,errors!'确实出现在日志文件中。

所有这一切的原因:网站在PHP 5.3上运行得非常好。这是它开发的版本。(我知道,应该在较新的版本上开发它。我有以前不受我控制的后勤原因)当我将版本提升到5.4或5.5时我得到内部服务器错误。有人可以提供有关此主题的一些见解和更深入的知识。非常感谢你。

编辑:$ 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();
}

1 个答案:

答案 0 :(得分:0)

@rjdown之前我做过这件事,而我只是在实际修复时再次出现了。它是删除ob_start(),因为标头没有以正确的顺序发送。 修正了该页面。

现在我还在其他地方收到内部服务器错误。现在不同的错误。涉及特定于我的服务器的glibc错误,超出了这个特定问题的范围。