Выбор табличных данных с помощью инструкций PDO
У меня есть php-скрипт, который выбирает данные через mysql_, однако в последнее время я читал, что PDO - это правильный путь, и что mysql_ обесценивается. Теперь я конвертирую этот скрипт в PDO.
Мой вопрос в том, что я не использую $_POST для выбора. Я просто хочу выбрать всю таблицу со всеми ее данными, поэтому я ввожу этот запрос:
$query = $dbh->prepare("SELECT * FROM students");
$query->execute();
$result = $query->fetchall(); // or you can just $result = $query as hakre proposed!
Итак, как и в случае с моей старой устаревшей версией скрипта mysql_, я использовал echo для отображения таблицы с данными в этом.
echo
"<table border='2'>
<tr>
<th>ID</th>
<th>A Number</th>
<th>First Name</th>
<th>Last Name</th>
<th>Why</th>
<th>Comments</th>
<th>Signintime</th>
</tr>"
;
foreach($result as $row)
{
echo "<tr>";
echo "<td>" . $row['id'] . "</td>";
echo "<td><a href=Student.php?studentA_num=" . $row['anum'] . ">" .$row['anum'] . " </a></td>";
echo "<td>" . $row['first'] . "</td>";
echo "<td>" . $row['last'] . "</td>";
echo "<td>" . $row['why'] . "</td>";
echo "<td>" . $row['comments'] . "</td>";
echo "<td>" . $row['signintime'] . "</td>";
echo "<td> <input type=\"button\" value=\"Start Session\"onClick=\accept.php?id=" . $row['id'] . "&start=true></td>";
}
echo "</tr>";
echo "</table>";
Теперь, используя это, я не могу получить ни одного вывода в свою таблицу.
Мой вопрос в том, не упускаю ли я что-то из своих утверждений select? Или я не собираю никаких строк? Также я установил настройки подключения в другом скрипте, который называется connect.php этого требует init.php (вверху всех моих страниц)
Изменить: 1
Отредактировал код, чтобы он теперь работал, а также добавил картинку, чтобы показать другим, как он должен выглядеть! Надеюсь, кто-нибудь сможет поставить это для какой-то пользы!
2 answers
На самом деле вы делаете слишком много:
$query = $dbh->prepare("SELECT * FROM students");
$query->execute();
$result = $dbh->query($query);
Проблемная строка:
$result = $dbh->query($query);
Проверьте с помощью http://php.net/pdo.query , параметр представляет собой строку, фактически строку SQL, которую вы уже использовали выше, а не значение результата вызова PDO::prepare()
.
Для вашего простого запроса вы можете просто сделать:
$result = $dbh->query("SELECT * FROM students");
Или, если вы хотите подготовиться:
$query = $dbh->prepare("SELECT * FROM students");
$query->execute();
$result = $query;
Ниже приведен некоторый шаблон, если вы хотите вставить переменные в запрос, поэтому вы готовитесь это.
Следующая проблема связана со строкой foreach
:
foreach($result as $row);
Вы немедленно завершаете цикл из-за точки с запятой ;
в конце. Удалите эту точку с запятой, чтобы следующий кодовый блок, заключенный в угловые скобки, стал телом цикла foreach.
Ваш код неверен:
$query = $dbh->prepare("SELECT * FROM students");
$query->execute();
$result = $dbh->query($query);
После выполнения подготовленного оператора вы можете просто вызвать fetchAll()
для него:
$query = $dbh->prepare("SELECT * FROM students");
$query->execute();
$result = $query->fetchAll();
Остальная часть вашего кода будет работать нормально, как только вы удалите точку с запятой после foreach.