我有这个查询,检查是否存在移动并且应该返回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);
}
Run Code Online (Sandbox Code Playgroud)
返回:
bool(false)
bool(false)
Run Code Online (Sandbox Code Playgroud)
如果我替换此代码:
$return = result(mysql_result($movement_performed, 0) == 1) ? true : false;
var_dump ($return);
Run Code Online (Sandbox Code Playgroud)
有了这个:
print_r ($movement_perfomed);
Run Code Online (Sandbox Code Playgroud)
返回:
Array ( [COUNT(`movement`)] => 2 )
Array ( [COUNT(`movement`)] => 3 )
Run Code Online (Sandbox Code Playgroud)
我认为完全错误,因为这些数字不是零,它应该返回真实吗?
回答你的问题:
mysql_result返回FALSE错误.您正在mysql_fetch_assoc根据mysql_result函数签名的要求传递数组而不是mysql资源:
string mysql_result ( resource $result , int $row [, mixed $field = 0 ] )
Run Code Online (Sandbox Code Playgroud)
因此它会返回,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;
Run Code Online (Sandbox Code Playgroud)
这会抓取count语句的结果并对其进行> 0检查.该> 0检查是不是真的需要,而且有利于表明意图,而不是依靠上truthy值.
附注:这些mysql_*功能已被弃用.您应该将代码迁移到使用MySQLi或PDO.遗憾的是,许多mysql_*函数不需要mysql资源这一事实.迁移代码将是一件痛苦的事情,因为您必须更改一堆函数或声明全局变量.我推荐前一个选项,但需要花费很多精力才能修复.
| 归档时间: |
|
| 查看次数: |
33334 次 |
| 最近记录: |