【发布时间】:2015-08-18 00:35:55
【问题描述】:
我编写了一些代码从数据库中提取数据,然后将结果作为关联数组返回,但是我将返回值切换为一个对象(有效),但在以下情况下它不再失败结果存在。
if($myobject = MyClass::GetRecords("something")) {
// this code is now executing all the time
} else {
// this code no longer executes even when there are no results
}
class MyClass {
public static function GetRecords($myparam) {
$cn = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);
$records = Array();
$query = '
SELECT
`' . DB_PREF . 'mytable`.`id`,
`' . DB_PREF . 'mytable`.`foo`,
`' . DB_PREF . 'mytable`.`bar`
FROM
`' . DB_PREF . 'mytable`
WHERE
`' . DB_PREF . 'mytable`.`bar`=?
';
if ($s = $cn->prepare($query)) {
$s->bind_param('s', $myparam);
$s->execute();
$result = $s->get_result();
while($row = $result->fetch_assoc()) {
$records[] = $row;
}
switch(count($records)) {
case 0:
$records = false;
break;
case 1:
$records = $records[0];
break;
}
$s->close();
} else {
// echo $cn->error;
}
mysqli_close($cn);
return (object)$records;
}
}
如果我使用return $records; 而不是return (object)$records;,则该条件完美运行
为什么这个条件失败或者我应该将$records 设置为什么,以确保当我希望它失败时条件失败(例如,没有从数据库返回记录)。目前,我将$records 设置为false,因为这是失败条件的事实标准。
提前致谢。
【问题讨论】:
-
“为什么这个条件失败”——因为对象总是被认为是布尔值“真”,即使它们是“空的”。
-
@CBroe - 我应该如何将对象设置为失败 - 并检查?
$records = empty()+if(!empty($records = MyClass::GetRecords('something'))??
标签: php mysqli conditional-statements