数据库字段计数和 if else 语句

问题描述 投票:0回答:1

目前我在最简单的地方都失败了。 我正在计算数据库中的条目并询问该值是否大于 2。即使没有条目,它也会给我错误消息,只有在条目超过 2 时才会显示该错误消息。

$newdate = date( 'Y-m-d', $fromform->date );
    $comparedate = $DB->sql_compare_text('datum');
    $comparedateplaceholder = $DB->sql_compare_text(':date');
    $compareustd = $DB->sql_compare_text('ustd');
    $compareustdplaceholder = $DB->sql_compare_text(':ustd');
    $laptops = $DB->get_records_sql(
        "SELECT COUNT(*) FROM {bs_steinweg} WHERE
        {$comparedate} = {$comparedateplaceholder}
        AND
        {$compareustd} = {$compareustdplaceholder}",
          [
            'date' => $newdate,
            'ustd' => $fromform->time,
          ]
    );
    var_dump($laptops);
    if ( $laptops > 2 ) {
        $getlaptops = get_string( 'laptopnotfree', 'local_buchungssystem' );
        redirect( $CFG->wwwroot . '/local/buchungssystem/bs_sw.php', $getlaptops, null, '\core\output\notification::NOTIFY_WARNING' );
    } else {

以下内容给了我:

var_dump($laptops);

array(1) { [0]=> object(stdClass)#390 (1) { ["count(*)"]=> string(1) "0" } }

我正确理解 var_dump() 给了我一个 0,对吗?

具体错误在哪里?

php moodle
1个回答
0
投票

我正确理解 var_dump() 给了我一个 0,对吗?

不,

var_dump()
给你一个数组。 其长度甚至不是0,而是1。打个比方……空篮子还是篮子。 你的变量仍然是一个数组。

与数组的比较没有概念意义:

if ( $laptops > 2 ) {

继续类比,您正在检查篮子是否超过两个苹果,而您想知道篮子包含是否超过两个苹果。

此操作成功解析为

true
纯属巧合。 在许多编程语言中,它会产生错误。

改为检查数组的长度:

if ( count($laptops) > 2 ) {
© www.soinside.com 2019 - 2024. All rights reserved.