SQL SELECT返回数组,但是PHP认为它为null

时间:2018-08-14 15:31:36

标签: php mysql sql null

我正在通过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中,它返回数组,所以我很困惑。你能帮我吗?

Screenshot of phpmyadmin

1 个答案:

答案 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]);