如何修复此mysqli PHP警告?
我不断收到以下警告:如何修复此mysqli PHP警告?,php,mysql,mysqli,Php,Mysql,Mysqli,我不断收到以下警告: [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_st
[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有时没有持有它应该持有的价值吗
救命啊 根据该线的定义
$stmt = mysqli_prepare($con, "UPDATE xxx SET yyy = ?, zzz = ?, timecheck = NOW(), aaa = ? WHERE bbb = '$ccc'");
在错误情况下可以返回false(参见此处的定义)
您的代码没有考虑这种情况。
由于所有其他使用过的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);
mysqli\u prepare()
如果发生错误,则返回语句对象或FALSE。检查$stmt是否分配为FALSE。是否检查了连接是否失败?您的$stmt
变量失败并返回bool
,不是函数所需的mysqli\u smst
资源。您还应该将$ccc
作为参数传递。@Gumbo您的意思是:bbb=?第二行是$ccc吗?@Gumbo我试试看是否有效。现在我的脚本正在运行,在停止之前不会应用更改,对吗?谢谢你的帮助!您的代码有助于避免错误,但它并不能解决为什么会首先发生错误的问题。这是真的。U说“然而,我已经检查了我的代码——它可以工作,但有时它会抛出这个错误”,这意味着它只会失败几次,这让我觉得可能是连接问题。您将看到我的代码中的这些错误,因此您可以考虑错误发生的地方。有了这些知识,修复起来应该很容易。检查是否从printf行获得输出。如果没有,那么您的查询本身就有问题。