Выбор данных таблицы с помощью операторов PDO
У меня есть php script, который выбирает данные через mysql_, однако в последнее время я читал, что PDO - это способ пойти и что mysql_ становится обесцененным. Теперь я конвертирую этот script в PDO.
Мой вопрос заключается в том, что я не использую $_POST для выбора. Я просто хочу выбрать всю таблицу со всеми своими данными, поэтому я введу этот запрос:
$query = $dbh->prepare("SELECT * FROM students");
$query->execute();
$result = $query->fetchall(); // or you can just $result = $query as hakre proposed!
так что, как и в моей старой обесцененной версии mysql_ script, я использовал эхо, чтобы эхо-таблицу с данными в ней.
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>";
Теперь, используя это, я не могу получить один вывод для моей таблицы.
![This is all that is being outputted]()
Мой вопрос: я что-то упустил из своих предложений? Или я не собираю строки? Также я установил настройки соединения в другом script, называемом connect.php, который требуется init.php(вверху всех моих страниц)
Изменить: 1
Отредактирован код, поэтому он теперь работает, а также добавляет картинку, чтобы показать другим, как это должно выглядеть! Надеюсь, кто-то может это использовать! ![This is how it looks!]()
Ответы
Ответ 1
Вы делаете слишком много:
$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.
Ответ 2
Неверный код:
$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.