mysqli参数错误 - 数据库连接工作正常吗?

时间:2015-05-31 18:11:20

标签: php mysqli error-handling row

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

<?php

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

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

    } // end while loop  
?>

ERROR

  

警告: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'); 
?>

2 个答案:

答案 0 :(得分:0)

the manual开始,返回值部分:

  

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

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

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

答案 1 :(得分:0)

变化

$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,boolean given
  • 要解决此问题,首先我们执行insert查询,然后执行另一个select查询,该查询在成功insert
  • 后检索表行