Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么返回布尔值(false)?_Php_Mysql_Boolean - Fatal编程技术网

Php 为什么返回布尔值(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`

我有一个查询,它检查一个移动是否存在,并且应该返回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)
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在您的函数中?您必须从函数返回结果。我编辑了我的代码示例