我有这个查询来检查运动是否存在并且应该返回 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?
最佳答案
回答你的问题:
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;
这会获取计数语句的结果并对其执行 > 0
检查。 > 0
检查并不是真正需要的,但有助于显示意图而不是依赖真实值。
旁注:mysql_*
函数已被弃用。您应该迁移代码以使用 MySQLi
或 PDO
。不幸的是,您使用的事实是许多 mysql_*
函数不需要 mysql
资源。迁移代码会很痛苦,因为您必须更改一堆函数或声明全局变量。我推荐前一个选项,但修复它需要很多努力。
关于php - 为什么这个返回 bool(false)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12181197/