php - How can I simply determine if there is (not) a result from PDOStatement fetch? -


consider following code:

$conn = new pdo("connection string", "user name", "password"); $conn->setattribute(pdo::attr_errmode, pdo::errmode_exception);  $sql = "select `id` `users` `displayname` = :displayname"; $parms = array(':displayname' => 'test'); $stmt = $conn->prepare($sql, array(pdo::attr_cursor => pdo::cursor_fwdonly)); $stmt->execute($parms);  $res = $stmt->fetch(); echo $res == null; 

and more consider line: echo ($res == null);

if there no row in database matches echo displays value of 1 -as expected -because $res in fact null. however, if there result returned $stmt->fetch(); echo produces nothing. but, have expected have produced 0 because value of $res array.

how can consistently , concisely compare result simply determine if there result or not?

when there's no result, doesn't return null. returns false (well, assuming pdo::fetch_both -- see full list, read doc). also, false casted string empty string. that's why you're not getting output.

echo false; //outputs nothing  $s = (string) false; var_dump($s === ""); //true  

as determining whether or not have result, can simple implicit check:

$res = $stmt->fetch(); if ($res) {      echo 'got row!'; } else {     echo 'no row :('; } 

this works because of few implicit casts. consider fetch going return: either non-empty array, or false. (bool) $arr === true if count($arr) > 0. here, should able see why works.

(note: in theory, result set indeed empty row. cause fetch return emtpy array. break implicit comparison considered false. can't imagine ever happen though. can't think of statement return result set row has no columns.)


Comments

Popular posts from this blog

Perl - how to grep a block of text from a file -

delphi - How to remove all the grips on a coolbar if I have several coolbands? -

javascript - Animating array of divs; only the final element is modified -