根據php手冊,您可以通過詢問$ stmt-> error和$ stmt-> errno來檢索任何預先準備的語句方法中的錯誤,但是bind_param方法從來沒有似乎將這些設置爲錯誤,任何人都可以證實這一點?或者告訴我我錯過了什麼?
例如:
echo "Start\n";
$db = new mysqli('localhost','test','xxxxxx','test');
$val = 1;
$st = $db->prepare('insert into tblTest set field1=?');
if($st == false)
{
printf("prepare: %s %d\n",$db->error,$st->errno);
}
$rs = $st->bind_param('is', $val);
if($rs == false)
{
printf("bind_param: %s %d\n",$st->error,$st->errno);
}
$rs = $st->execute();
if($rs == false)
{
printf("execute: %s %d\n",$st->error,$st->errno);
}
$rs = $st->close();
if($rs == false)
{
printf("close: %s %d\n",$st->error,$st->errno);
}
echo "Finish\n";
從命令行顯示運行以上:
Start
PHP Warning: mysqli_stmt::bind_param(): Number of elements in type definition string doesn't match number of bind variables in test.php on line 14
bind_param: 0
execute: No data supplied for parameters in prepared statement 2031
Finish
所以PHP是看到此作爲警告,bind_param被返回false,但錯誤&錯誤號是不組。執行也失敗,並已正確設置錯誤& errno
這是一個錯誤?
是否記錄爲做其他事情而不是在失敗時返回false? – Mat 2012-07-07 11:43:36
mysql_error的PHP手冊指出$ stmt-> error會返回「最近調用的語句函數可能成功或失敗的錯誤消息」。我會爭辯說,對bind_param的調用是失敗的最近調用的語句函數。 – Chris 2012-07-07 12:59:03