【问题标题】:PHP not able to convert SQL result to string? [duplicate]PHP 无法将 SQL 结果转换为字符串? [复制]
【发布时间】:2018-04-22 05:22:19
【问题描述】:
<?php
$q = intval($_GET['q']);

$con = mysqli_connect('censored','censored','censored','db');
if (!$con) {
    die('Could not connect: ' . mysqli_error($con));
}

mysqli_select_db($con,"db");
$sql="SELECT message FROM messages WHERE code = '".$q."'";
$result = mysqli_query($con,$sql);
$resultstring = (string)$result;

echo $resultstring;

mysqli_close($con);
?>

我试图将查询结果回显给用户,但是当这个 PHP 通过 ajax 运行时,我得到了这个错误:

可恢复的致命错误:类 mysqli_result 的对象不能是 在第 12 行的 D:\xampp\htdocs\getmessage.php 中转换为字符串

现在我不明白这一点,因为我已经将 $result 转换为字符串。谢谢!

【问题讨论】:

  • 您在文档中遗漏了来自resultsetfetching 记录中的哪一点?
  • "现在我不明白这一点,因为我已经将 $result 转换为字符串" ...好吧你不是,因为你不能,因此错误。

标签: php mysqli


【解决方案1】:

mysqli_query() 不能转换成字符串。

您必须使用 mysqli_fetch 解析到数组。

示例:

if ($result=mysqli_query($con,$sql))
  {
  // Fetch one and one row
  while ($row=mysqli_fetch_row($result))
    {
    printf ("%s (%s)\n",$row[0],$row[1]);
    }
}

【讨论】:

    【解决方案2】:

    首先mysqli_query 对数据库执行查询 它不直接返回值

    $query = mysqli_query($con,$sql);
    

    为此,请使用mysqli_fetch_assoc,它将获取结果行作为关联数组

    $result = mysqli_fetch_assoc($query);
    

    那么你现在可以得到你的价值了

    $resultstring = $result['message'];
    

    所以你的代码应该是这样的

    <?php
        $q = intval($_GET['q']);
    
        $con = mysqli_connect('censored','censored','censored','db');
        if (!$con) {
            die('Could not connect: ' . mysqli_error($con));
        }
    
        mysqli_select_db($con,"db");
        $sql="SELECT message FROM messages WHERE code = '".$q."'";
        $query = mysqli_query($con,$sql);
        $result = mysqli_fetch_assoc($query);
        $resultstring = $result['message'];
    
        echo $resultstring;
    
        mysqli_close($con);
    ?>
    

    【讨论】:

    • 谢谢,这在一定程度上解决了我的问题。如果我通过 Chrome 的开发工具进行检查,现在会给出结果,但回显没有显示在发出请求的页面上。我认为它会回显以便用户看到它?
    • 完美解决方案
    【解决方案3】:

    您需要将数据(RS)转换为数组!

    $result = mysqli_fetch_assoc($result);
    print_r($result);
    

    【讨论】:

      【解决方案4】:

      作为您查询成功的结果,您将获得 mysqli_result 对象。如果您想获取接收到的行,请使用获取数据功能。

      $result = mysqli_query($con,$sql);
      $resultstring = $result->fetch_row()[0];
      

      参见文档:mysqli_query & mysqli_result

      【讨论】:

        【解决方案5】:

        我已经通过以下方法解决了类似的问题。

        // Assign your sql statement
        $sqlMasterSiteIds = "SELECT DISTINCT table_name FROM site WHERE gwid = 39 AND master_site_id NOT LIKE '0'";
        
        // Run the query
        $masterSiteIdsQuery = $this->db->query($sqlMasterSiteIds);
        
        // Prepare container               
        $masterSiteIds = [];
        
        // Fetch first row of query results
        $first_row = $masterSiteIdsQuery->fetch_assoc();
        
        // Assign first row to your prepared container
        $masterSiteIds= $first_row['master_site_id'];
        
        // Change the results into string comma separated so it can be used in next mysqli query or echoed
        while($sub_row = $masterSiteIdsQuery->fetch_assoc()) {
             $masterSiteIds = implode(',', array($masterSiteIds, $sub_row['master_site_id']));
        }
        
        // Now you can use $masterSiteIds which is a STRING of values comma separated
        echo $masterSiteIds;   // Output: '1024, 1142, 8492'
        

        我希望它能帮助您或其他有需要的人。我不确定这是否是最好的方法,但它在我的情况下效果很好,因为我必须将结果更改为 STRING,以便我可以在下一个 mysqli 查询中使用 FIND_IN_SET 命令。

        编码愉快!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-07-17
          • 2019-06-20
          • 2011-11-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-18
          相关资源
          最近更新 更多