我正在通过PHP在mySQL中选择某项,并且该命令返回了一些数组(是正确的),但是当我将返回的SELECT放入if条件中并询问其是否返回null时,则比PHP表示返回的是null(哪个不正确,因为它正在返回数组)
include '../db.php'; // my config
function select($command) {
global $db;
$sql = "".$command."";
$sqlDone = $db -> prepare($sql);
$sqlDone -> execute();
$data = $sqlDone -> fetchAll();
return $data;
}
$select = "SELECT likes.ID, likes.ID_user, likes.ID_post FROM likes WHERE likes.ID_user = '53' AND likes.ID_post = '2'"
if (select($select) == null) { // goes throw this
print_r(select($select)); // returns array
} else {
echo 'not null';
}
我尝试使用!is_null,但是它仍然无法正常工作。 我试图将具有相同值的select命令直接放在phpmyadmin中,它返回数组,所以我很困惑。你能帮我吗?
答案 0 :(得分:1)
PDO的fetchAll()
返回一个数组,如果没有结果,则返回一个空数组(非NULL)。
只需使用empty()
$return = select($select); //put this into a variable, because if you don't, you'll query the database twice and may get different results.
if (empty($return)) { // goes throw this
print_r($return); // returns array
} else {
echo 'not null';
}
请注意,您的函数实际上并没有做任何特别的事情。您可以通过以下方法实现相同的目的:
$return = $db->prepare($select)->execute()->fetchAll();
如果您使用了PDO包装器,它可能会更短。例如,使用我自己的包装器GrumpyPDO,您将使用
$return = $db->all($select);
然后,如果您有要传递给查询的变量,则可以这样做
$select = "SELECT likes.ID, likes.ID_user, likes.ID_post FROM likes WHERE likes.ID_user = ? AND likes.ID_post = ?"
$return = $db->all($select, [$userid, $postid]);