这是因为
$pdo->errorInfo()引用成功执行的最后一条语句。由于
$sql->execute()返回false,因此它不能引用该语句(不引用任何内容或引用之前的查询)。
至于为什么
$sql->execute()返回false,我不知道……您的
$params数组或数据库连接有问题。
PDO :: errorCode —提取与数据库句柄上的最后一个 *** 作关联的SQLSTATE
注意:PHP手册(http://php.net/manual/zh/pdo.errorinfo.php)并未确切定义“对数据库句柄的最后 *** 作”的含义,但是如果绑定参数存在问题,则说明错误会在PDO内部发生,并且与数据库没有任何交互。可以肯定地说,如果
$pdo->execute()return
true,那
$pdo->errorInfo()是有效的。如果
$pdo->execute()返回
false,
$pdo->errorInfo()则文档中的行为并不清楚。如果我从我的经验中正确回忆起
true,即使MySQL返回错误,也执行execute
return ,
false如果未执行任何 *** 作,则返回return。由于文档不是特定的,因此它可能是特定于db驱动程序的。
该答案反映了截至2012年9月时的实际经验。正如用户指出的那样,文档未明确重申这种解释。它也可能只是反映了特定的数据库驱动程序实现的,但它应该永远是真实的,如果
$pdo->execute()回报率
true,这
$pdo->errorInfo()是有效的。
您可能还需要在连接顺序中设置 PDO :: ERRMODE_EXCEPTION 。异常处理无需检查和查询错误。
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)