2016-01-22 2 views
0

У меня есть PDO, который запрашивает несуществующего пользователя в базе данных для обработки регистрации пользователя. Проблема в том, что var_dump и print_r оба ничего не печатают, если пользователь не найден.var_dump и print_r ничего не показывают, не могут проверить, существует ли элемент в базе данных

try { 
     $stmt->execute(); 
     while($row = $stmt->fetch()) { 
      var_dump($row); 
      print_r($row); 
      if($row = null) { // Not working 
      # if(!isset($row)) { // Not working 
      # if(empty($row)) { // Also not working 
       echo "User not found"; 
      } else { 
       echo $row['realname']."<br>"; 
      } 
     } 
    } catch(PDOException $e) { 
     echo "FATAL ERROR OCCURED:".$e->getMessage(); 
    } 

Что здесь происходит? Страница просто пустая.

PHP -l index.php repors синтаксических ошибок и страница не является метанием ошибки 500.

Ничто в источнике зрения либо.

Вот соединительные детали:

try { 
    $dbh = new PDO('mysql:host=127.0.0.1;dbname=PHP_PDO', "root", "root", array(
      PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION 
     )); 
} catch(PDOException $e) { 
    die("FATAL ERROR OCCURED"); 
} 

$stmt = $dbh->prepare("SELECT realname FROM users WHERE name = :name"); 

$stmt->bindParam(":name", $name); 

$name = "mivuckovaca"; // NOT IN DATA BASE 
+0

В приведенном выше коде отсутствует var_dump и print_r. –

+0

Извините, исправлено. – Gala

+0

Что делать, если вы используете '$ stmt-> execute (": name ", $ name);'? Также проверьте 'if (! $ Stmt) { echo" \ nPDO :: errorInfo(): \ n "; print_r ($ dbh-> errorInfo()); } ' –

ответ

3

Причина, почему это не работает, то, что вы «присвоение» в if($row = null), используя 1 знак равенства, а не «сравнения» if($row == null) с 2 одинаковыми знаками (или 3 «если идентичны», в зависимости от того, что вы хотите проверить).

Проконсультируйтесь с нами: The 3 different equals здесь, на стеке об этом.

Ссылки:

PHP видит "назначение", как действительный синтаксис, и именно поэтому вы не получаете никаких ошибок.

1

Оказывается, мне пришлось немного перестроить код.

Я взял $row = $stmt->fetch(); из цикла while и проверил строку $ отдельно. Например:

$stmt = $dbh->prepare("SELECT realname FROM users WHERE name = :name"); 

$stmt->bindParam(":name", $name); 

$name = "mivuckovaca"; // NOT IN DATABSE ON PURPOSE 

try { 
    $stmt->execute(); 
} catch(PDOException $e) { 
    echo "FATAL ERROR OCCURED:".$e->getMessage(); 
} 

$res = $stmt->fetchAll(); # Replaced fetch() with fetchAll() 

if(empty($res)) { 
    echo "User not found"; 
} else { 
    foreach($res as $row) { # replaced while() with foreach() 
     echo $row['realname']; 
    } 
} 
+0

А, ну. Вы посмотрите на это :-) Хорошо, я рад, что этот вопрос был разрешен. –

+0

Да, это был случай задавать вопросы, не задумываясь. Ну что ж. – Gala

+0

Мы только люди ;-) –

Смежные вопросы