Выбор данных таблицы с помощью операторов 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.