私は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>";
現在これを使用しているため、テーブルに単一の出力を取得できません。
私の質問は、選択したステートメントから何かが欠落しているのですか?または、行をフェッチしていませんか?また、init.php(すべてのページの上部)に必要なconnect.phpという別のスクリプトで設定された接続設定もあります。
編集: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ループの本体になるように、そのセミコロンを削除します。
あなたのコードは間違っています:
_$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の後でセミコロンを削除すると、残りのコードは正常に機能します。