mysql_fetch_array是否为布尔字段?

时间:2010-07-06 09:47:29

标签: php sql mysql

我有一个布尔字段,当为真时,它似乎存储为1。

当尝试在while循环中抓取该字段时,我收到错误:

mysql_fetch_array()期望参数1为资源,布尔值为

布尔值是否应该存储为“TRUE”而不是“1”?

否则,为什么我会收到此错误?

编辑:

我的代码:

$sqltotal = mysql_query("SELECT SUM(cost) as total FROM sales where passport = '{$therecord['passport']}' AND {$therecord['paid']} <> 1");
$row = mysql_fetch_array($sqltotal);

2 个答案:

答案 0 :(得分:2)

您的错误与布尔值的存储方式无关,无论是在数据库中还是在PHP中。

mysql_fetch_array()的第一个参数必须是您使用mysql_query执行的查询;这就是错误所说的。

答案 1 :(得分:2)

这里可能发生了两件事:

  1. 您尝试使用类似于$resultset = mysql_query(...);的代码执行查询,但MySQL的响应是错误消息,$resultset包含布尔值FALSE。
  2. 您执行了一个不返回结果集的查询,例如INSERTUPDATE查询,$resultset包含布尔值TRUE,它只表示查询是成功。
  3. 调试时,请尝试以下操作:

    if ( $resultset === false ) {
        echo mysql_error();
    } else {
        // whatever you were doing
    }
    

    但是,将此格式保留在生产代码中会有危险,生成代码将discloses too much information留给非管理员用户。更好的方法是记录错误并向用户显示一般错误消息。

    if ( $resultset === false ) {
        $message = 'SQL Error in ' . __FILE__ . '@' . (__LINE__ - 2) . ': ' . mysql_error() . "\n";
        error_log($message, 3, ERRLOG); # ERRLOG must be defined
        # or send an e-mail to the developer
        //error_log($message, 1, $developer_email);
        # output an error message to the user. For example:
        ?>
        <p class="error">There was an internal database error. 
          It's been logged, and we'll look into it. Please try again later.
        </p>
        <?php
    } else {
        // whatever you were doing
        ...
    }
    

    甚至比这更好,切换到PDO并使用例外。