1

以下は、データベース内のすべてのデータをテーブルに表示するための PHP コードです。

PDOを使用するのではなく、以下のコードを使用してログインしてDBを選択すると:

 mysql_connect("localhost","root","12345678") or die(mysql_error());
   mysql_select_db("clubresults") or die(mysql_error());
   $query=mysql_query("SELECT * from events ORDER By EventID ASC") or die(mysql_error());

出力には、すべてのデータが正しくリストされたテーブルが表示されます。

ただし、PDO を使用すると、次のエラーが表示されます。

Warning: mysql_num_fields() expects parameter 1 to be resource, object given in C:\xampp\htdocs\clubresults\listevents.php on line 52

Warning: mysql_fetch_row() expects parameter 1 to be resource, object given in C:\xampp\htdocs\clubresults\listevents.php on line 58

以下は、データを取得してテーブルに配置するための完全な php コードです (動作しません) 誰でも間違いを指摘できますか? 私はそれを自分で理解できないようだから..すべての提案は本当に感謝しています! ありがとう!

$pdo = new PDO('mysql:host=localhost;dbname=clubresults', 'root', '12345678');
        #Set Error Mode to ERRMODE_EXCEPTION.
        $pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  


   $query=$pdo->query('SELECT * from events ORDER By EventID ASC');


   <<<<<<<<<<<<<<<<THIS BIT WORKS IF NOT USING PDO>>>>>>>>>>
$numfields = mysql_num_fields($query);
       print("<table border=\"1\">\n<tr>\n");
       for ($i=0; $i<$numfields; $i++) {
          printf("<th>%s</th>\n", mysql_field_name($query,$i));
       }
       print("</tr>\n");
       while ($row = mysql_fetch_row($query)) {
          print("<tr>\n");
          for ($i=0; $i<sizeof($row); $i++) {
             printf("<td><a href=\"index.php?ID=%s\">%s</a></td>\n", $row[0],$row[$i]);
          }
          print("</tr>\n");
       }
       print("</table>\n");
4

1 に答える 1

1

mysql_num_fields()PDOを使用したり、PDOを使用したりすることはできませんmysql_fetch_row()。これらは、古いMySQL拡張機能である別のAPIの一部です。

代わりに、を呼び出したのでPDO::query()、を呼び出します$query->fetch()。最初の行の配列キーを使用して、テーブルの見出しを作成します。

$query = $pdo->query('SELECT * from events ORDER By EventID ASC');
$rowset = array();

if ($query) {
  while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
    // Build array of rows
    $rowset[] = $row;
  }    

  // Output header first
  $headrow = $rowset[0];
  print("<table border=\"1\">\n<tr>\n");
  // Use $rowset[0] to write the table heading
  foreach ($headrow as $col => $val) {
    printf("<th>%s</th>\n", $col);
  }
  print("</tr>");

  // Then output table rows.
  // Outer loop iterates over row
  foreach ($rowset as $row) {
     print("<tr>");
     // Inner loop iterates over columns using $col => $val
     foreach ($row as $col => $val) {
        // We don't know your column names, but substitute the first column (the ID) for FIRSTCOL here
        printf("<td><a href=\"index.php?ID=%s\">%s</a></td>\n", $row['FRISTCOL'],$val);
     }
     print("</tr>");
  }
}
print("</table>");

補遺

SELECT *一般的に、列見出しを使用して動的に書き出すことはお勧めしません。代わりに、ステートメントで要求する列についてSELECT明示し、書き出すテーブルでそれらについて明示してください。そうすれば、列が表示される順序を決定的にすることができ、画面の出力に表示されるべきではない列をテーブルに追加することに巻き込まれることはありません。

于 2012-05-31T01:12:44.997 に答える