Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何修复此mysqli PHP警告?_Php_Mysql_Mysqli - Fatal编程技术网

如何修复此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行获得输出。如果没有,那么您的查询本身就有问题。