15

私は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

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

4

2 に答える 2

12

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

$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ループの本体になるようにします。

于 2012-12-31T17:36:15.723 に答える
6

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

$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の後にセミコロンを削除すると、残りのコードは正常に機能します。

于 2012-12-31T17:36:36.580 に答える