谁能解释为什么
$sql->execute($params);
返回FALSE,而
FALSE
print $pdo->errorCode(); print_r($pdo->errorInfo());
两者都返回SQLSTATE 00000,根据文档说明这意味着成功?它是an INSERT,实际上什么都没有插入到数据库中…所以,为什么我会收到来自的成功消息SQLSTATE?
SQLSTATE
00000
INSERT
如果有帮助,这是代码…
$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,因此它不能引用该语句(不引用任何内容或引用之前的查询)。
$pdo->errorInfo()
$sql->execute()
至于为什么$sql->execute()返回false,我不知道……您的$params数组或数据库连接有问题。
$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驱动程序的。
$pdo->execute()
true
false
该答案反映了截至2012年9月时的实际经验。正如用户指出的那样,文档未明确重申这种解释。它也可能只是反映了特定的数据库驱动程序实现的,但它应该永远是真实的,如果$pdo->execute()回报率true,这$pdo->errorInfo()是有效的。
您可能还需要在连接顺序中设置 PDO :: ERRMODE_EXCEPTION 。异常处理无需检查和查询错误。
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );