【发布时间】:2016-05-11 13:36:53
【问题描述】:
我使用的prepare方法如下:
$db= new mysqli("localhost","***","***","***");
if ($db->connect_error) {
die('Connection Error');
}
$id = 1;
if($stmt = $db->prepare('SELECT name FROM table WHERE id = ? '))
{
$stmt->bind_param('i', $id);
$stmt->execute();
// $stmt->close();
echo "Success<br>";
}
else {
echo "Something broke :/<br>";
}
$id =2;
if($stmt = $db->prepare('SELECT name FROM table WHERE id = ? '))
{
$stmt->bind_param('i', $id);
$stmt->execute();
echo "Success<br>";
}
else {
echo "Something broke :/<br>";
$error = $db->errno . ' ' . $db->error;
echo $error;
}
如果我执行我得到的脚本
成功
东西坏了:/
0
在第二次调用 prepare 方法后,我如何找出它失败的原因?出于某种原因,$db->errno 返回 0,表示没有出错。但是,prepare 方法失败并返回 false,所以我无法检查 $stmt->error;
我偶然发现,当我删除第一个 $stmt->execute() 调用时,再次调用 prepare 方法可以正常工作(在第一次和第二次调用时)。我在这里错过了什么?
编辑
如果我取消注释,Maxim Tkach 建议
// $stmt->close();
然后我得到
成功
成功
但这是为什么呢?我从未在任何地方读到关闭准备语句至关重要。
这是来自 PHP 手册:
关闭一个准备好的语句。 mysqli_stmt_close() 也会释放 语句句柄。如果当前语句有待处理或未读 结果,此函数将它们取消,以便可以进行下一个查询 执行。
我没有看到他们说关闭以执行第二个准备语句至关重要。我错过了什么吗?
【问题讨论】:
-
if(!$stmt->execute()){ trigger_error("There was an error.... ".$db->error, E_USER_WARNING);}?这就是问题所在吗?可能还有php.net/manual/en/function.error-reporting.php -
@Fred-ii- 不,我在调用 bind_param 方法时已经收到错误。
-
你到底想对亚当做什么?我想我没有抓住这个问题。你能详细说明一下吗?您是否需要记录错误并准确捕获导致错误的原因?如果是这样,那么您应该查看日志。等待其他人看看他们是否对您的问题有更好的理解。
-
我还是不知道这个问题是关于什么的; 对不起。
-
在
foreach loop之外为prepare statement写入,在foreach loop.内部为bind_param and execute statemen写入
标签: php