目前我在最简单的地方都失败了。 我正在计算数据库中的条目并询问该值是否大于 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,对吗?
具体错误在哪里?
我正确理解 var_dump() 给了我一个 0,对吗?
不,
var_dump()
给你一个数组。 其长度甚至不是0,而是1。打个比方……空篮子还是篮子。 你的变量仍然是一个数组。
与数组的比较没有概念意义:
if ( $laptops > 2 ) {
继续类比,您正在检查篮子是否超过两个苹果,而您想知道篮子包含是否超过两个苹果。
此操作成功解析为
true
纯属巧合。 在许多编程语言中,它会产生错误。
改为检查数组的长度:
if ( count($laptops) > 2 ) {