我有这个查询检查是否存在移动并且应该返回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吗?
答案 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_*
函数已被弃用。您应该将代码迁移到MySQLi
或PDO
。遗憾的是,您使用了许多mysql_*
函数不需要mysql
资源的事实。迁移代码将是一件痛苦的事情,因为您必须更改一堆函数或声明全局变量。我建议使用前一个选项,但需要花费很多精力才能修复。
答案 1 :(得分:0)
我认为应该是
(count(mysql_fetch_assoc ) >0 ) ? true : false;
而不是
result(mysql_result($movement_performed, 0) == 1) ? true : false;