2

我有这个查询来检查运动是否存在并且应该返回真或假。这个查询

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 )

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

4

2 回答 2

7

要回答您的问题:

mysql_result错误返回FALSE。您正在传递数组mysql_fetch_assoc而不是 mysqlmysql_result函数签名所要求的资源:

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资源的事实。迁移代码会很痛苦,因为您必须更改一堆函数或声明全局变量。我推荐前一个选项,但要修复它需要付出很多努力。

于 2012-08-29T15:28:53.730 回答
0

我认为应该是

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

而不是

result(mysql_result($movement_performed, 0) == 1) ? true : false; 
于 2012-08-29T15:21:03.217 回答