【问题标题】:mysqli Parameter Error - DB Connection Working Fine?mysqli 参数错误 - 数据库连接工作正常吗?
【发布时间】:2015-05-31 18:11:19
【问题描述】:

我正在向我的一个表中的列添加一个值。我的目标是通过表格在页面上显示列数据。但是,当我添加此代码(循环表格并显示数据)时,出现错误:

<?php

while($row = mysqli_fetch_array($result)) {
    $customer_name = $row['customerName']; 

echo "<tr>
        <td>$customer_name</td>
     </tr>";

    } // end while loop  
?>

错误

警告:mysqli_fetch_array() 期望参数 1 为 mysqli_result, 布尔值 xxx在线 35

我已经对此错误进行了一些研究,我看到回复说数据库连接可能不正确。但是,我检查了我的数据库,并且该值确实按应有的方式输入到表中,因此连接或查询数据库没有问题。

上面的代码我也注释掉了,HTML也显示的很好。我已将问题与上面的 while/array 代码隔离开来。该错误仅在将该段代码添加到脚本中时出现。

如果您对错误可能是什么问题以及表格未显示有任何见解,请告诉我。我为类似的脚本使用了相同类型的代码,并且从未设置过参数,并且效果很好。

如果需要,这里是完整的代码:

<?php
require_once("./includes/database_connection.php");

error_reporting(E_ALL);
ini_set('display_errors', 1);

$query = "INSERT INTO customers(customerName) VALUES('IKB')";

$result = mysqli_query($dbc, $query)
    or die ('Error querying databse');
?>

<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <title>Home</title>
    <link type="text/css" rel="stylesheet" href="classic_cars.css" />
</head>

<body>
    <?php
        require_once("./includes/navigation.php");
    ?>

    <table>
        <tr>    
            <td>customerName</td>
        </tr>
    </table>    

    <?php

    while($row = mysqli_fetch_array($result)) {
        $customer_name = $row['customerName']; 

    echo "<tr>
            <td>$customer_name</td>
         </tr>";

        } // end while loop  
    ?>

    <?php
        mysqli_close($dbc);
        require_once("./includes/footer.php");
    ?>      
</body>
</html>

这是数据库连接:

<?php
    define('DB_LOCATION', 'x');
    define('DB_USERNAME', 'x');
    define('DB_PASS', 'x');
    define('DB_NAME', 'x');

    $dbc = mysqli_connect(DB_LOCATION, DB_USERNAME, DB_PASS, DB_NAME)
        or die('Error connecting to database'); 
?>

【问题讨论】:

  • 请张贴“database_connection.php”的内容
  • @Abdo Adel 没问题,在底部添加。

标签: php mysqli error-handling row


【解决方案1】:

来自the manual,返回值部分:

失败时返回 FALSE。对于成功的 SELECT、SHOW、DESCRIBE 或 EXPLAIN 查询 mysqli_query() 将返回一个 mysqli_result 对象。为了 其他成功的查询 mysqli_query() 将返回 TRUE。

您的查询是INSERT,因此返回类型将为布尔值 TRUE 或 FALSE。这就是为什么$result 是布尔值而不是 mysqli_result 对象的原因。

看来,至少在您的示例代码中,您在一开始就已经知道客户名称以便执行INSERT,那么为什么不直接保存该值以供以后重用呢?否则,如果您确实需要再次从数据库中检索完整记录,无论出于何种原因,您都需要在执行 while($row = mysqli_fetch_array($result)) 之前执行新的 SELECT 查询。

【讨论】:

    【解决方案2】:

    改变

    $query = "INSERT INTO customers(customerName) VALUES('IKB')";
    $result = mysqli_query($dbc, $query) or die ('Error querying databse');
    

    $query = "INSERT INTO customers(customerName) VALUES('IKB')";
    mysqli_query($dbc, $query) or die ('Error querying databse');
    $query2 = "select customerName from customers";
    $result = mysqli_query($dbc, $query2) or die ('Error querying databse');
    

    说明

    • mysqli_fetch_array期望第一个参数包含结果集,执行DDL语句如insert into customers...插入后不返回新表行但返回操作是否成功(true/false),这就是错误的原因说 mysqli_fetch_array() 期望参数 1 是 mysqli_result,给定的布尔值
    • 要解决此问题,首先我们执行insert 查询,然后执行另一个select 查询,在成功后检索表行insert

    【讨论】:

      猜你喜欢
      • 2013-09-04
      • 1970-01-01
      • 2020-11-14
      • 1970-01-01
      • 1970-01-01
      • 2014-04-12
      • 1970-01-01
      • 1970-01-01
      • 2011-12-31
      相关资源
      最近更新 更多