Выбор табличных данных с помощью инструкций 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>";

Теперь, используя это, я не могу получить ни одного вывода в свою таблицу.

This is all that is being outputted

Мой вопрос в том, не упускаю ли я что-то из своих утверждений select? Или я не собираю никаких строк? Также я установил настройки подключения в другом скрипте, который называется connect.php этого требует init.php (вверху всех моих страниц)

Изменить: 1

Отредактировал код, чтобы он теперь работал, а также добавил картинку, чтобы показать другим, как он должен выглядеть! Надеюсь, кто-нибудь сможет поставить это для какой-то пользы! This is how it looks!

Author: RaGe10940, 2012-12-31

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.

 11
Author: hakre, 2012-12-31 17:36:15

Ваш код неверен:

$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.

 6
Author: Tom van der Woerdt, 2012-12-31 17:36:36