PDO SQL状态为“ 00000”,但仍然出错?
谁能解释为什么
$sql->execute($params);
返回FALSE
,而
print $pdo->errorCode();print_r($pdo->errorInfo());
两者都返回SQLSTATE
00000
,根据文档说明这意味着成功?它是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