2015-03-11 5 views
0

Я пытаюсь сделать sql-запрос с использованием PDO в PHP, и что-то идет не так, что я не могу понять.Pdo Предупреждение: неверный аргумент, предоставленный foreach() в php

Вот мой код:

*//Connection file* 

    < ? php 

    $dsn = 'mysql:host=localhost;dbname=oopdo'; 

    $db = new PDO($dsn, 'root', ''); 

    ?> 

    *//Index file* 

    < ? php 

    try{ 
     require_once 'pdo_connection.php'; 

     $sql = 'SELECT * FROM names'. 
       'ORDER BY name'; 
    } catch (Exception $ex) { 
     $error = $ex->getMessage(); 

    } 


    ?> 

<html> 
    <head> 

    </head> 
    <body> 
     <h2>Looping direct over SELECT query</h2> 
     <table> 
      <tr> 
       <th>Name</th> 
       <th>Meaning</th> 
       <th>Gender</th> 
      </tr> 


      foreach($db->query($sql) as $row){ (line 35) 


      <tr> 
       <td> echo $row['name']; </td> 
       <td> echo $row['meaning']; </td> 
       <td> echo $row['gender']; </td> 
      </tr> 

      } 
     </table> 
    </body> 
</html> 

Предупреждение: Неверный аргумент, поставляемый для Еогеаспа() в строке 35

Что я делаю неправильно здесь?

Спасибо.

+2

'PDO :: query' может вернуться' false'. – tsnorri

+0

попробуйте ваш запрос в phpmyadmin, чтобы узнать, работает ли он как ожидается –

+0

Какую модель просмотра/шаблона вы используете? Возможно, вам нужно будет поместить значения в массив '$ data []', прежде чем перейти в механизм шаблонов. – Robbie

ответ

1

То, что вы действительно сделали неправильно:

Вы не проверили статус возврата вашего запроса, который не удался с синтаксической ошибкой. Вы должны использовать код что-то вроде этого:

$result = $db->query($sql); 
if ($result !== false) { 
    foreach($result as $row) { 
     // do stuff 
    } 
} else { 
    echo 'The SQL query failed with error '.$db->errorCode; 
} 

То, что вы на самом деле сделали неправильно:

Где вы разделить ваш запрос в течение двух линий вы умудрились опустить некоторые пробелы. Ваш запрос представлен в виде

SELECT * FROM namesORDER BY name 

Добавить дополнительное пространство в строке сразу после names

+0

Вы совершенно правы! Большое спасибо! – compt

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