Php 为什么返回布尔值(false)?
我有一个查询,它检查一个移动是否存在,并且应该返回true或false。这个问题Php 为什么返回布尔值(false)?,php,mysql,boolean,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`
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)
Array ( [COUNT(`movement`)] => 2 )
Array ( [COUNT(`movement`)] => 3 )
如果我替换此代码:
$return = result(mysql_result($movement_performed, 0) == 1) ? true : false;
var_dump ($return);
为此:
print_r ($movement_perfomed);
返回:
bool(false)
bool(false)
Array ( [COUNT(`movement`)] => 2 )
Array ( [COUNT(`movement`)] => 3 )
因为这些数字不是零,所以我认为应该返回真值,这是完全错误的吗?我认为应该是
(count(mysql_fetch_assoc ) >0 ) ? true : false;
而不是
result(mysql_result($movement_performed, 0) == 1) ? true : false;
我想应该是这样
(count(mysql_fetch_assoc ) >0 ) ? true : false;
而不是
result(mysql_result($movement_performed, 0) == 1) ? true : false;
回答你的问题:
mysql\u结果
返回错误的FALSE
。您正在从mysql\u fetch\u assoc
传递数组,而不是mysql\u 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
资源。迁移代码将是一件痛苦的事情,因为您必须更改一堆函数或声明全局变量。我建议使用前一个选项,但需要花费大量精力来修复。要回答您的问题:
mysql\u结果
返回错误的FALSE
。您正在从mysql\u fetch\u assoc
传递数组,而不是mysql\u 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
资源。迁移代码将是一件痛苦的事情,因为您必须更改一堆函数或声明全局变量。我建议使用前一种方法,但需要花费大量精力来修复。为什么人们会做类似于(条件)的事情?真:假
?您的条件
已经是一个布尔值,这样做没有任何意义,只是让其他人看您的代码时感到困惑。更重要的是,不要使用mysql.*
函数,它们已被弃用。使用mysqli.*
或PDO。我编辑了代码,因为结果不应该在那里。我对这一点非常陌生,这个查询是基于我已经做过的或已经演示过如何做的其他查询。关于PDO,我是否必须将我的db连接切换到PDO才能开始使用PDO查询?@Colbyd是的,当你创建一个新的PDO对象时,它会建立一个新的连接。阅读此处的文档:@NullUserException我正计划将所有mysql切换到PDO,但我认为在使用任何PDO查询之前,我需要从connect.php文件开始,并将其切换到PDO。为什么人们会这样做?真:假?您的条件
已经是一个布尔值,这样做没有任何意义,只是让其他人看您的代码时感到困惑。更重要的是,不要使用mysql.*
函数,它们已被弃用。使用mysqli.*
或PDO。我编辑了代码,因为结果不应该在那里。我对这一点非常陌生,这个查询是基于我已经做过的或已经演示过如何做的其他查询。关于PDO,我是否必须将我的db连接切换到PDO才能开始使用PDO查询?@Colbyd是的,当你创建一个新的PDO对象时,它会建立一个新的连接。阅读这里的文档:@NullUserException我本来打算把我所有的mysql都切换到PDO,但我想在使用任何PDO查询之前,我需要先从connect.php文件开始,并将其切换到PDO。(代替)存在是有原因的。(代替)的存在是有原因的。@Levison Morrison感谢您的帮助。我在上面发布了php循环,我在那里调用这个函数,以及我试图完成的任务。你能看一下并告诉我调用这个函数时我做错了什么吗?现在当我做一个var\u dump($return)
时,它会得到bool(true)bool(true)
,这是正确的,因为movement
确实存在于这个类中的这个用户。当我从while循环中执行var\u dump(isPerformed)
时,它返回NULL,因此如果返回true,它将执行我不希望执行的函数。你能告诉我这一行的作用是什么吗$return=$movement\u performed[0]>0
@Colbyd你真的说了return$return代码>在您的函数中?您必须从函数返回结果。我编辑了我的代码示例以反映这一点。我的代码当前看起来像这样$return=$movement\u[0]>0代码>@LeviMorrison感谢您的帮助。我在上面发布了php循环,我在那里调用这个函数,以及我试图完成的任务。你能看一下并告诉我调用这个函数时我做错了什么吗?现在当我做一个var\u dump($return)
时,它会得到bool(true)bool(true)
,这是正确的,因为movement
确实存在于这个类中的这个用户。当我从while循环中执行var\u dump(isPerformed)
时,它返回NULL,因此如果返回true,它将执行我不希望执行的函数。你能告诉我这一行的作用是什么吗$return=$movement\u performed[0]>0
@Colbyd你真的说了return$return代码>在您的函数中?您必须从函数返回结果。我编辑了我的代码示例