Chr*_*ris 24 php mysql sql database pdo
任何人都可以解释原因
$sql->execute($params);
Run Code Online (Sandbox Code Playgroud)
返回FALSE,而
print $pdo->errorCode();
print_r($pdo->errorInfo());
Run Code Online (Sandbox Code Playgroud)
两者都归还SQLSTATE 00000,这意味着根据文件的成功?它是一个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());
Run Code Online (Sandbox Code Playgroud)
use*_*069 16
这是因为$pdo->errorInfo()引用了成功执行的最后一个语句.因为$sql->execute()返回false,所以它不能引用该语句(无论是之前还是之前的查询).
至于为什么$sql->execute()返回false,我不知道......你的$params数组或数据库连接是否存在问题.
PDO :: errorCode - 获取与数据库句柄上的最后一个操作关联的SQLSTATE
注意:PHP手册(http://php.net/manual/en/pdo.errorinfo.php)没有准确定义"数据库句柄上的最后一个操作"的含义,但是如果绑定参数存在问题,那么在PDO内部发生错误,并且没有与数据库进行任何交互.可以肯定地说,如果$pdo->execute()返回true,那$pdo->errorInfo()是有效的.如果$pdo->execute()返回false,$pdo->errorInfo()则文档中未明确说明其行为.如果我从我的经验中正确回想起来true,即使MySQL返回错误,也会执行返回,false如果没有进行任何操作则返回.由于文档不是特定的,因此可能是特定于db驱动程序的.
这个答案反映了截至2012年9月编写时的实际经验.正如用户指出的那样,文档没有明确重申这种解释.它也可能只反映特定的数据库驱动程序实现,但如果$pdo->execute()返回则应该始终有效true,这$pdo->errorInfo()是有效的.
您可能还想在连接序列中设置PDO :: ERRMODE_EXCEPTION.异常处理使得不必检查和查询错误.
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24410 次 |
| 最近记录: |