2014-12-04 163 views
-1

我不断收到以下警告:如何解决这个mysqli PHP警告?

[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

你检查,如果你的连接失败? – Rizier123 2014-12-04 07:01:09

+0

你的'$ stmt'变量失败并返回一个'bool',而不是'mysqli_smst'资源的功能要求。 – Darren 2014-12-04 07:01:31

+1

您也应该传递'$ ccc'作为参数。 – Gumbo 2014-12-04 07:02:45

回答

1

是根据定义行

$stmt = mysqli_prepare($con, "UPDATE xxx SET yyy = ?, zzz = ?, timecheck = NOW(), aaa = ? WHERE bbb = '$ccc'"); 

可以返回错误的情况下假(定义见这里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); 
+0

工作,你的代码可以帮助避免错误,但它并没有解决,为什么错误摆在首位出现的问题。 – user3210369 2014-12-04 07:13:43

+0

那是真实的。 ü说,“不过,我已经检查我的代码 - 它的工作原理,但有时它抛出这个错误”,这意味着它不只是失败的一些时间,这让我觉得这可能是一个连接问题,你会看到我的代码这些错误,因此您可以考虑在错误发生时有。这些知识应该很容易解决。 检查,如果你得到FRM中的printf线的输出,如果不是那里有什么问题您查询本身。 – 2014-12-04 07:16:11

+0

好一点,谢谢 – user3210369 2014-12-04 19:39:18

0

mysqli_prepare()返回一个语句对象或FALSE如果occurred.check $语句是否被分配虚假错误。