【问题标题】:How to fetch all the data from database in php如何在php中从数据库中获取所有数据
【发布时间】:2014-10-17 11:04:58
【问题描述】:

这是我的代码:

<?php

/*** mysql hostname ***/
$hostname = 'localhost';

/*** mysql username ***/
$username = 'root';

/*** mysql password ***/
$password = '';

try {
    $dbh = new PDO("mysql:host=$hostname;dbname=sample", $username, $password);
    /*** echo a message saying we have connected ***/
    echo 'Connected to database <br />';

$sql = "SELECT * FROM sampletable";

$stmt = $dbh->query($sql);
$result = $stmt->fetch(PDO::FETCH_ASSOC);

foreach($result as $key =>$val){

echo $key. '-' .$val.'<br />';

}
$dbh = null;

    }
catch(PDOException $e)
    {
    echo $e->getMessage();
    }
?>

现在我正在学习 php,我想知道 pdo 连接以插入、更新从数据库中获取数据。我参考了这个链接http://www.phpro.org/tutorials/Introduction-to-PHP-PDO.html#7.1

现在我得到了第一列的值。我可以知道如何从数据库中获取所有记录吗?

提前致谢。

【问题讨论】:

    标签: php mysql sql pdo


    【解决方案1】:

    你需要使用

    $result = $stmt->fetchAll();
    

    然后

    $result = $stmt->fetch(PDO::FETCH_ASSOC);
    

    【讨论】:

    • 从你的回答中,我得到了这样的 0-Array 1-Array
    • 您可以打印结果并检查 echo "
      ";print_r($result);echo "
      ";您需要更改 for 循环代码或打印 echo $val['column_name'].'
      ;
    【解决方案2】:

    您可以只使用-&gt;fetchAll() 方法:

    $result = $stmt->fetchAll(PDO::FETCH_ASSOC); // returns all rows
    foreach($result as $key => $row) {
        echo $row['id'] . ' - ' . $row['column_name'] . '<br/>';
                         // ^ name of the column, this returns a multi dimensional
    }
    

    旁注:它内部仍然是一个数组,因此您需要在 foreach 中访问该副本的索引。

    或者也这样:

    while($row = $result->fetch(PDO::FETCH_ASSOC)) {
        echo $row['id'] . ' - ' . $row['col1'] . '<br/>';
    }
    

    【讨论】:

    • 什么是 col1? @鬼
    • @deepika 你不能直接回显$val,它仍然是一个数组
    • @deepika 您需要在循环内以$row['column_name']; 的身份访问它
    • 我得到了这样的 0-xx 1-yy.. .. 但在我的数据库 id 的 5 和 6. 所以我会专家 5-xx 和 6-yy.. 如何做到这一点
    • @deepika 你需要使用$row['id'],检查我的修改
    【解决方案3】:

    您可以使用fetchAll() 来获取查询的所有结果,如下所示 .

    <?php
    
    /*** mysql hostname ***/
    $hostname = 'localhost';
    
    /*** mysql username ***/
    $username = 'root';
    
    /*** mysql password ***/
    $password = '';
    
    try {
        $dbh = new PDO("mysql:host=$hostname;dbname=sample", $username, $password);
        /*** echo a message saying we have connected ***/
        echo 'Connected to database <br />';
    
    $sql = "SELECT * FROM sampletable";
    
    $stmt = $dbh->query($sql);
    $result = $stmt->fetchAll(); //instead of fetch(PDO::FETCH_ASSOC)
    
    
    foreach ($results as $key => $result) {
    echo $key. '-' .$val.'<br />';
    }
    $dbh = null;
    
        }
    catch(PDOException $e)
        {
        echo $e->getMessage();
        }
    ?>
    

    【讨论】:

      【解决方案4】:

      你只有几个小错误。

      $stmt-&gt;fetch() 命令一次获取一个结果行,因此您需要循环运行它,而且我担心 foreach 将无法工作,因为它用于处理数组的所有项目。

      <?php
      
      /*** mysql hostname ***/
      $hostname = 'localhost';
      /*** mysql username ***/
      $username = 'root';
      /*** mysql password ***/
      $password = '';
      
      try {
          $dbh = new PDO("mysql:host=$hostname;dbname=sample", $username, $password);
          /*** echo a message saying we have connected ***/
          echo 'Connected to database <br />';
      
          $sql = "SELECT * FROM sampletable";
      
          $stmt = $dbh->query($sql);
      
          while ($result = $stmt->fetch(PDO::FETCH_ASSOC)) {
             // you will have to change fieldname to an actual fieldname from the resultset    
             echo $result['fieldname'] . '<br />';
      
          }
          $dbh = null;
      
      }
      catch(PDOException $e)
      {
          echo $e->getMessage();
      }
      ?>
      

      附加编辑:

      我不知道您的列名是什么,因为您已经完成了 select *,但假设您的表有 2 列 1 称为 id 和一列称为 custname

      你会的

         $sql = "SELECT * FROM sampletable";
         $stmt = $dbh->query($sql);
      
         while ($result = $stmt->fetch(PDO::FETCH_ASSOC)) {
             echo $result['id'] . '-' . $result['custname'] . '<br>';
         }
      

      如果您像这样更改fetch() 语句,您可以获得对象而不是数组的结果,我更喜欢object->property 语法而不是数组语法,但结果非常相似。像这样

         $sql = "SELECT * FROM sampletable";
         $stmt = $dbh->query($sql);
      
         while ($result = $stmt->fetch(PDO::FETCH_OBJ)) {
             echo $result->id . '-' . $result->custname . '<br>';
         }
      

      【讨论】:

      • ok @RiggsFolly:现在我知道了,所有的名字.. 但我想像这样显示 1-xx 2-yy.. 这里 1,2 是 id。那是自动增量。为此该怎么办
      猜你喜欢
      • 2020-09-13
      • 2017-11-04
      • 1970-01-01
      • 2014-09-24
      • 1970-01-01
      • 2011-02-16
      • 2018-06-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多