mysqli的bind_param不设置stmt- $>错误或$ stmt->错误号(m

2019-06-26 03:16发布

根据PHP手册,你可以通过询问stmt- $>错误和$ stmt->错误号但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,但错误与错误号未设置。 执行也是失败的,并已正确设置错误和错误号

这是一个错误?

Answer 1:

MySQLi::errorMySQLi::errno是由RDBMS设立的语句时,PHP代码中遇到错误时返回到PHP,而不是错误代码容器和消息。 一个不正确的呼叫到bind_param()带有参数不足)并显然不能与RDBMS进行通信,并且因此将不从RDBMS接收其错误。

根据该文件 , bind_param()返回一个布尔值FALSE失败。 所以,你需要确认是否成功调用。

$rs = $st->bind_param('is', $val);
if ($rs) {
  $st->execute();
}


文章来源: mysqli bind_param does not set $stmt->error or $stmt->errno
标签: php mysqli