web-dev-qa-db-ja.com

PDOステートメントを使用したテーブルデータの選択

私はmysql_を介してデータを選択するphpスクリプトを持っていますが、最近、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

私の質問は、選択したステートメントから何かが欠落しているのですか?または、行をフェッチしていませんか?また、init.php(すべてのページの上部)に必要なconnect.phpという別のスクリプトで設定された接続設定もあります。

編集:1

コードを編集して機能するようにしました。また、他の人にどのように見えるかを示す画像を追加しました。うまくいけば、誰かがこれをある種の用途に使うことができます! This is how it looks!

11
RaGe10940

あなたは実際にやりすぎです:

_$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ループの本体になるように、そのセミコロンを削除します。

12
hakre

あなたのコードは間違っています:

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