Предупреждение Pdo: неверный аргумент для foreach () в php

0

Я пытаюсь сделать sql-запрос с использованием PDO в 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>

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

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

Благодарю.

  • 2
    PDO::query может вернуть FALSE .
  • 0
    попробуйте выполнить запрос в phpmyadmin, чтобы увидеть, работает ли он должным образом
Показать ещё 1 комментарий
Теги:
foreach
pdo
warnings

1 ответ

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
    Вы совершенно правы! Большое спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню