【问题标题】:Php -MySQL query failing - error Fatal error: Uncaught Error: Call to a member function fetch_assoc() on booleanPhp -MySQL 查询失败 - 错误致命错误:未捕获错误:在布尔值上调用成员函数 fetch_assoc()
【发布时间】:2017-03-31 05:09:11
【问题描述】:

我有以下 php 代码:

<?php
    $connect = mysqli_connect("localhost","root", "","archit") or die("Couldn't connect to database");
    $str = "SET @id := (SELECT ID FROM users where Name ='$u_name'); SELECT UID FROM useratt where ID = '@id';";
    echo $str;
    $query12 = mysqli_multi_query($connect,$str);
    echo $query12;
    while($row = $query12->fetch_assoc())
    {
        $str1 = "SET @UID := '".$row."'; 
         SELECT AttributeValue FROM att_value where UID=@UID; 
         SET @AID := (SELECT AID FROM att_value WHERE UID=@UID);
         SELECT AttributeName FROM att_name WHERE AID=@AID;";
         echo $str1;
        $query1= mysqli_multi_query($connect,$str1);
        echo $row[0];
    }
?>

我得到了一般错误,但是当我在 MySQL 上运行相同的代码时,它可以正常工作。有人可以帮我看看我错过了什么。

我什至尝试过异常处理,但没有帮助。

注意:代码在 while 循环条件下失败。

【问题讨论】:

  • 我知道..在发布之前已经进行了适当的搜索。已经检查了所有已经回答的帖子,但没有帮助。连接工作正常。其他查询正常工作。
  • 您是否在 $query12 中获取资源 ID?
  • 如果我在 mysql 控制台中运行它,我会得到。但是当我运行 PHP 时,我得到了一个错误。当我打印 $query12 它打印“1”
  • 完全正确..因为它 mysqli_multi_query 返回布尔值..我发布正确的方法来做到这一点
  • 使用新的mysqli函数建立连接,可能会修复错误

标签: php mysqli mysqli-multi-query


【解决方案1】:

mysqli_multi_query() 执行一个或多个由分号连接的查询。要从第一个查询中检索结果集,您可以使用 mysqli_use_result() 或 mysqli_store_result()。所有后续查询结果都可以使用 mysqli_more_results() 和 mysqli_next_result() 处理。如果第一条语句失败,mysqli_multi_query() 仅返回 FALSE。要从其他语句中检索后续错误,您必须先调用 mysqli_next_result()。

if (mysqli_multi_query($connect,$str))
 {

     do
    {
        if ($result=mysqli_store_result($connect)) {

          while ($row=mysqli_fetch_row($result))
            {
                    $str1 = "SET @UID := '".$row."'; 
                    SELECT AttributeValue FROM att_value where UID=@UID; 
                    SET @AID := (SELECT AID FROM att_value WHERE UID=@UID);
                    SELECT AttributeName FROM att_name WHERE AID=@AID;";
                    echo $str1;
                    $query1= mysqli_multi_query($connect,$str1);
                    echo $row[0];
            }

          mysqli_free_result($result);
          }
    }
    while (mysqli_next_result($connect));
}

【讨论】:

  • 如果你能解释一下你的答案就太好了,这样其他人就容易理解原因了。
【解决方案2】:

A.第一个问题是你的SELECT,你写:

SELECT UID FROM useratt where ID = '@id';

您必须将 @id 变量中的引号删除:

SELECT UID FROM useratt where ID = @id;

B. mysqli_multi_query 执行后,必须添加另外两个调用才能得到结果:

  1. 您的查询将返回两个结果,第一个结果是设置变量。第二个是你的数据查询。因此,我们下一步移动到第二个结果来获取数据:

    mysqli_next_result($connect);

  2. 移动到第二个结果后,我们必须使用 mysqli_store_result 获取结果:

    $query12 = mysqli_store_result($connect);

希望对你有帮助!

【讨论】:

    【解决方案3】:
    <?php
        $connect = mysqli_connect("localhost","root", "","archit") or die("Couldn't connect to database");
        $str = "SET @id := (SELECT ID FROM users where Name ='$u_name'); SELECT UID FROM useratt where ID = '@id';";
        echo $str;
        $query12 = mysqli_multi_query($connect,$str);
        echo $query12;
        while($row = mysqli_fetch_assoc($query12))
        {
            $str1 = "SET @UID := '".$row."'; 
             SELECT AttributeValue FROM att_value where UID=@UID; 
             SET @AID := (SELECT AID FROM att_value WHERE UID=@UID);
             SELECT AttributeName FROM att_name WHERE AID=@AID;";
             echo $str1;
            $query1= mysqli_multi_query($connect,$str1);
            echo $row[0];
        }
    ?>
    

    【讨论】:

    • mysqli_multi_query 返回布尔值而不是资源 ID
    猜你喜欢
    • 1970-01-01
    • 2019-12-23
    • 1970-01-01
    • 1970-01-01
    • 2020-08-24
    • 2016-05-18
    • 1970-01-01
    • 2018-09-10
    • 2018-10-11
    相关资源
    最近更新 更多