我有一个布尔字段,当为真时,它似乎存储为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);
答案 0 :(得分:2)
您的错误与布尔值的存储方式无关,无论是在数据库中还是在PHP中。
mysql_fetch_array()
的第一个参数必须是您使用mysql_query
执行的查询;这就是错误所说的。
答案 1 :(得分:2)
这里可能发生了两件事:
$resultset = mysql_query(...);
的代码执行查询,但MySQL的响应是错误消息,$resultset
包含布尔值FALSE。INSERT
或UPDATE
查询,$resultset
包含布尔值TRUE,它只表示查询是成功。调试时,请尝试以下操作:
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并使用例外。