Я пытаюсь сделать 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
Что я здесь делаю неправильно?
Благодарю.
Что вы действительно сделали неправильно:
Вы не проверяли возвращаемый статус вашего запроса, который потерпел неудачу с синтаксической ошибкой. Вы должны использовать код примерно так:
$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
PDO::query
может вернутьFALSE
.