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

标签 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 尝试将变量绑定(bind)到准备好的语句期间失败了。这也适用于 bindValue()。任何时候绑定(bind)一个值之前执行失败。

我尝试了很多方法来在日志中获取某种类型的输出。例如在页面顶部

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 时,我得到内部服务器错误.有人可以提供有关此主题的一些见解和更深入的知识。非常感谢。

编辑:$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(),因为 header 未按正确的顺序发送。 修复了那个页面。

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

关于php - PHP 5.4.11 上 PDO::execute(array()) 的内部服务器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26517940/

相关文章:

php - 捕获成功插入的记录到数组中

php - 配置 ZF2 view_manager 以加载 2 个单独的模板映射

php - 我可以将 SELECT 查询放入 MySQL 的 IF 语句中吗?

mysql - 在 mysql View 中插入给出错误的输出

mysql - 如何阻止 Access 在记录更新后显示 #DELETED?

php - 从我的 pdo 调用创建正确的数据结构

php - 我们如何在用户使用javascript登录时强制删除缓存

php - Laravel 4 中的 Cron 作业

mysql - 重新排序表时查询错误

php - 将 PDO 数据库对象从包含脚本传递到类