为什么这回归bool(假)?

时间:2012-08-29 15:15:43

标签: php mysql boolean

我有这个查询检查是否存在移动并且应该返回true或false。此查询

function movement_performed_today($class_id, $client_id){
$class_id = (int)$class_id;
$client_id = (int)$client_id;



$query = mysql_query("SELECT COUNT(`movement`) FROM `completed_movements` WHERE `class_id` = '$class_id' AND `client_id` = '$client_id' AND `date` = CURDATE()");

$movement_performed = mysql_fetch_assoc($query);

$return = (mysql_result($movement_performed, 0) == 1) ? true : false;   
    var_dump ($return);
}

返回:

bool(false) 
bool(false)

如果我替换此代码:

$return = result(mysql_result($movement_performed, 0) == 1) ? true : false; 
    var_dump ($return);

有了这个:

print_r ($movement_perfomed);

返回:

Array ( [COUNT(`movement`)] => 2 ) 
Array ( [COUNT(`movement`)] => 3 )

我完全错误地认为,因为这些数字不是零,它应该返回true吗?

2 个答案:

答案 0 :(得分:7)

回答你的问题:

错误时,

mysql_result会返回FALSE。您正在根据mysql_fetch_assoc函数签名的要求从mysql_result而不是mysql资源传递数组:

string mysql_result ( resource $result , int $row [, mixed $field = 0 ] )

因此它会返回FALSE,因为它有错误。


更好的方法:

// Change
$movement_performed = mysql_fetch_assoc($query);
$return = result(mysql_result($movement_performed, 0) == 1) ? true : false;

// to
$movement_performed = mysql_fetch_row($query);
return $movement_performed[0] > 0;

这会抓取count语句的结果并对其进行> 0检查。 > 0检查并不是真正需要的,但有助于显示意图,而不是依赖于真实的价值。


附注:mysql_*函数已被弃用。您应该将代码迁移到MySQLiPDO。遗憾的是,您使用了许多mysql_*函数不需要mysql资源的事实。迁移代码将是一件痛苦的事情,因为您必须更改一堆函数或声明全局变量。我建议使用前一个选项,但需要花费很多精力才能修复。

答案 1 :(得分:0)

我认为应该是

(count(mysql_fetch_assoc ) >0 ) ? true : false; 

而不是

result(mysql_result($movement_performed, 0) == 1) ? true : false;