PDO SQL状态为“ 00000”,但仍然出错?

谁能解释为什么

$sql->execute($params);

返回FALSE,而

print $pdo->errorCode();

print_r($pdo->errorInfo());

两者都返回SQLSTATE00000,根据文档说明这意味着成功?它是an

INSERT,实际上什么都没有插入到数据库中…所以,为什么我会收到来自的成功消息SQLSTATE


如果有帮助,这是代码…

$sql = $pdo->prepare("

INSERT INTO user (

username, fname, pass, salt, email,

loc_id_home, country_id_home, region_id_home,

cont_id_home, timestamp_reg, timestamp_upd, timestamp_lastonline,

online_status, gender, birthdate

)

VALUES (

:username,:fname,:pass,:random_salt,:email,

:loc_id_home,:country_id_home,:region_id_home,

:cont_id_home,'".time()."','".time()."','".time()."',

1,:gender,:birthdate)

");

$params=array(

':username'=>$username,

':fname'=>$fname,

':pass'=>$pass,

':random_salt'=>$random_salt,

':email'=>$email,

':loc_id_home'=>$loc_id_home,

':country_id_home'=>$country,

':region_id_home'=>$region,

':cont_id_home'=>$continent,

':gender'=>$gender,

':birthdate'=>$birthdate

);

$sql->execute($params);

print $pdo->errorCode();

print_r($pdo->errorInfo());

回答:

这是因为$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 );

以上是 PDO SQL状态为“ 00000”,但仍然出错? 的全部内容, 来源链接: utcz.com/qa/411747.html

回到顶部