php - 为什么这个返回 bool(false)?

标签 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?

最佳答案

回答你的问题:

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_* 函数已被弃用。您应该迁移代码以使用 MySQLiPDO。不幸的是,您使用的事实是许多 mysql_* 函数不需要 mysql 资源。迁移代码会很痛苦,因为您必须更改一堆函数或声明全局变量。我推荐前一个选项,但修复它需要很多努力。

关于php - 为什么这个返回 bool(false)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12181197/

相关文章:

PHP + winexe -> 永久加载

php - 访问数组中的显式对象

php - curl 错误 35 : Unknown SSL google OAuth2

mysql - 无法使用 mysql Chef Cookbook 覆盖 mysql 数据库

PHP 语法 字符串连接

c# - 将字段放入下一个空数组索引

c - C中 boolean 运算的结果是1还是0?

PHP 相当于 Ruby 的拯救

mysql - 优化连接查询以从 A 获取数据,条件是 B 按 B 排序

java - 有没有一种方法可以使用 | 一次比较多个(非 boolean 值)事物?或 & 在 Java 中,类似于如何使用 | 捕获多个异常?