我一直收到以下警告:
[04-Dec-2014 06:51:49 UTC] PHP Warning: mysqli_stmt_bind_param() expects parameter 1 to be mysqli_stmt, boolean given in xxx.php on line 48
[04-Dec-2014 06:51:49 UTC] PHP Warning: mysqli_stmt_execute() expects parameter 1 to be mysqli_stmt, boolean given in xxx.php on line 49
[04-Dec-2014 06:51:49 UTC] PHP Warning: mysqli_stmt_close() expects parameter 1 to be mysqli_stmt, boolean given in xxx.php on line 50
在我的(有限)经验中,这意味着我输入的MYSQL查询是错误的。但是,我检查了我的代码 - 它有效,但有时会抛出此错误。到底是怎么回事?相关代码如下。
$stmt = mysqli_prepare($con, "UPDATE xxx SET yyy = ?, zzz = ?, timecheck = NOW(), aaa = ? WHERE bbb = '$ccc'");
mysqli_stmt_bind_param($stmt, "dss", $abc, $def, $ghi);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
$ abc是一个浮点数,$ def是NULL,$ ghi是一个字符串。问题可能是$ ccc有时候没有保留应有的价值吗?
请帮助!
答案 0 :(得分:1)
按照定义行
$stmt = mysqli_prepare($con, "UPDATE xxx SET yyy = ?, zzz = ?, timecheck = NOW(), aaa = ? WHERE bbb = '$ccc'");
在错误情况下可以返回false(请参阅此处的定义http://php.net/manual/de/mysqli.prepare.php)
您的代码不考虑这种情况。 由于你所有其他使用的mysqli函数都需要一个mysqli_stmt对象,你会得到这些错误。
你应该使用这样的代码:
$con = mysqli_connect("host", "user", "pw", "database");
/* check connection */
if (mysqli_connect_errno())
{
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
if ($stmt = mysqli_prepare($con, "UPDATE xxx SET yyy = ?, zzz = ?, timecheck = NOW(), aaa = ? WHERE bbb = '$ccc'"))
{
mysqli_stmt_bind_param($stmt, "dss", $abc, $def, $ghi);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
}
mysqli_close($con);
答案 1 :(得分:0)
mysqli_prepare()
返回一个语句对象,如果发生错误则返回FALSE。检查$ stmt是否被赋值为false。