php - 如何使用 PDO (mysql) 正确调试 Insert 语句?

标签 php mysql debugging pdo

$PDO_db = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset=UTF-8' , DB_USER, DB_PWD);
$sth = $PDO_db->prepare($insert);   
$arrPar = array(':nome' =>  $nome);         
$r = $sth->execute($arrPar);    
var_dump($arrPar);
print_r($PDO_db->errorInfo());
var_dump($r);
exit();

假设 $insert statemet 包含 SQL 错误,使用上面的代码我注意到以下内容:

  1. 代码A

    print_r($PDO_db->errorInfo());
    

    无论如何都会输出:

    Array (
        [0] => 00000
        [1] => 
        [2] => 
    )
    

    但是 var_dump($s) 是假的

  2. 如果在插入语句中我有一些 placemark 例如:名称

    "Insert into mytable (name) VALUE(:name);"
    

    然后在 $arrPar = array(':name' => $value) 中使用 $value=NULL

    print_r($PDO_db->errorInfo());
    

    会再次输出:

    Array
    (
        [0] => 00000
        [1] => 
        [2] => 
    )
    

    但是 var_dump($s) 是假的

所以我想知道,如果方法 errorInfo 应该给我一个错误描述,却默默地消除了错误,那么使用 PDO 调试 MySQL 语句的正确方法是什么?

PDO::errorInfo() 返回错误信息数组”

最佳答案

奇怪...您确定没有插入任何内容吗? MySQL 的成功返回代码 0,errorInfo 确实返回了。但就像@Jack 说的那样:

try
{
    $PDO_db = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset=UTF-8' , DB_USER, DB_PWD);
    $PDO_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sth = $PDO_db->prepare($insert);
    echo 'Insert prepared<br/>';
    $arrPar = array(':nome' =>  $nome);//shouldn't this be :name?
    $r = $sth->execute($arrPar);
    echo 'Insert executed<br/>';
    var_dump($r);
}
catch(PDOException $pdoE)
{
    echo $pdoE->getMessage().'<br/>';
    var_dump($pdoE);
}
exit();//?

这应该会为您提供更多关于正在发生的事情的线索。此外,您声明(两次)$svar_dump 为假,但您将执行调用的返回值分配给 $r...我假设这是一个错字,但你永远不知道,因此对 ':nome' 的评论。
同时牢记@Clarence 的建议,并设置你的 php .ini 错误报告给 E_ALL | E_STRICT,一开始您可能讨厌它发出的大量警告,但它避免了您在另一台机器上部署代码或升级 PHP 版本时可能(并且可能会)遇到的任何问题。无论如何:它不像 PHP 是一种严格的语言,E_STRICT 会花费您 huuuge 大量的时间来修复警告...

关于php - 如何使用 PDO (mysql) 正确调试 Insert 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12643547/

相关文章:

php - 如何反转foreach $key value PHP?

php - 通过 PHP 的 "insert into"mySQL 查询似乎有效,但未添加任何内容

mysql - 如何在 Wordpress 中获取新提交帖子上方的最新评论帖子?

php - 在 jquery 和 php 中显示来自 dropmenu 的数据库的结果

c++ - 链接器错误已定义

php - 如何使用 Visual Studio 在 Windows 上调试 PHP 5 运行时?

php - 计算字节数组的 SHA-256

mysql - 为地址更改+定价创建正确的数据库表结构

google-chrome - 如何使用 Chrome 远程调试 CasperJS?

php - 更改 Joomla 数据库