Checking for an empty result (PHP, PDO, and MySQL)

mysql, pdo, php

Solution

You're throwing away a result row when you do `$sth->fetchColumn()`. That's not how you check if there are any results. You do

if ($sth->rowCount() > 0) {
  ... got results ...
} else {
   echo 'nothing';
}

Relevant documentation is here: PDOStatement::rowCount

Problem

What am I doing wrong here? I'm simply retrieving results from a table and then adding them to an array. Everything works as expected until I check for an empty result... This gets the match, adds it to my array and echoes the result as expected: ``` $today = date('Y-m-d', strtotime('now')); $sth = $db->prepare("SELECT id_email FROM db WHERE hardcopy = '1' AND hardcopy_date <= :today AND hardcopy_sent = '0' ORDER BY id_email ASC"); $sth->bindParam(':today', $today, PDO::PARAM_STR); if(!$sth->execute()) { $db = null; exit(); } while ($row = $sth->fetch(PDO::FETCH_ASSOC)) { $this->id_email[] = $row['id_email']; echo $row['id_email']; } $db = null; return true; ``` When I try to check for an empty result, my code returns 'empty', but no longer yields the matching result: ``` $today = date('Y-m-d', strtotime('now')); $sth = $db->prepare("SELECT id_email FROM db WHERE hardcopy = '1' AND hardcopy_date <= :today AND hardcopy_sent = '0' ORDER BY id_email ASC"); $sth->bindParam(':today',$today, PDO::PARAM_STR); if(!$sth->execute()) { $db = null; exit(); } if ($sth->fetchColumn()) { echo 'not empty'; while ($row = $sth->fetch(PDO::FETCH_ASSOC)) { $this->id_email[] = $row['id_email']; echo $row['id_email']; } $db = null; return true; } echo 'empty'; $db = null; return false; ```

Original source

Related problems