1

下面是我的 PHP 代码,用于在表格中显示我的数据库中的所有数据。

如果我使用下面的代码登录并选择 DB 而不是使用 PDO:

 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

您将无法使用PDOmysql_num_fields()mysql_fetch_row()与 PDO 一起使用——它们是不同 API 的一部分,即旧的 MySQL 扩展。

相反,既然您已经调用了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 回答