根据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