gpt4 book ai didi

php - mysqli bind_param 不设置 $stmt->error 或 $stmt->errno

转载 作者:可可西里 更新时间:2023-11-01 00:23:50 28 4
gpt4 key购买 nike

根据 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。执行也失败了,并正确设置了错误和错误号

这是一个错误吗?

最佳答案

MySQLi::errorMySQLi::errno 是 RDBMS 返回给 PHP 的错误代码和消息的容器,不是错误设置语句时在PHP代码中遇到。对 bind_param() 的错误调用(参数不足)显然不会与 RDBMS 通信,因此不会从 RDBMS 接收到错误。

根据to the docs , bind_param() 在失败时返回 bool 值 FALSE。因此,您需要验证它是否已成功调用。

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

关于php - mysqli bind_param 不设置 $stmt->error 或 $stmt->errno,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11374672/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com