【问题标题】:PHP SQL query resultsPHP SQL查询结果
【发布时间】:2010-11-18 22:53:38
【问题描述】:

好吧,我很有信心我只是在几天前才这样做,尽管我可能会发疯。例如,我正在尝试遍历 SQL 结果数组..

$query = mysql_query("SELECT * FROM `my_table`");
$result = mysql_fetch_assoc($query); 

现在 $result 应该返回多行.. 如果我使用 while 循环遍历它,它就会返回。不幸的是,我试图用 foreach 循环访问这些数据,但由于某种原因它不起作用。它只给了我第一行,而 print_r($result) 也只给了我第一行。

foreach($result as $name => $value)
    echo "$name = $value\n"; 

任何建议将不胜感激!

** 编辑:

我喜欢所有聪明的答案。我知道 php 手册的网站,我知道 mysql_fetch_assoc() 返回什么。这是我的解决方案:

function returnSQLArray() { 
    $returnArray = array(); 
    $row = 0; 
    $query = mysql_query("some sql"); 
    while($result = mysql_fetch_assoc($query)) { 
        $returnArray[$row] = $result; 
        $row++; 
    } 
    return $returnArray; 
}

【问题讨论】:

    标签: php mysql arrays


    【解决方案1】:

    $result = mysql_fetch_assoc($query);返回单行...您需要循环获取每一行。您正在遍历该行以提取每一列。

    【讨论】:

    • 是的,我知道这一点。有没有办法增加行指针以到达下一行?
    • 每次使用 mysql_fetch_xxx 获取一行时它会自动递增。您需要循环 fetch - while ($result = mysql_fetch_assoc($query) - 这会将 $result 依次设置为每一行,直到没有剩余行并返回 false 以退出循环
    【解决方案2】:

    弗拉德森讽刺地指出的是非常真实的。我对 PHP 编程的尝试(多年的价值)在 php.net 网站上得到了大量的阅读资料。我认为它是现有最好的在线编程文档,远远超过我 20 年来使用的任何其他语言。主要是因为社区贡献的惊人能力。

    另外,我强烈建议将您正在谈论的内容抽象到一个 db 帮助器类中。可以参考PHPBB 代码作为示例。 PHPBB 代码可能不如理想的 OO,但它仍然是架构的一个很好的参考点。而且,这样做不仅仅是因为您可能会切换数据层或更改版本,而是因为它使得引入常见的错误报告、查询日志记录、数据缓存和许多其他此类有用的功能变得微不足道。这也使得处理多个连接变得更加容易。

    示例可能是为了让您可以公开一个更像:(请原谅这里的 ADODB 特性,但它仍然是考虑 MySQL 的好方法)

    include "db.inc.php";    
    $SQL = "SELECT * FROM user WHERE id=123";
    $oDB = new Database("localhost", "database", "user", "password");
    $oRS = $oDB->NewRecordSet($SQL);
    while( $data = $oRS->Read() ) {
        // do stuff
    }
    

    通过这种方式,页面不必担心访问数据的繁琐,而可以更多地考虑如何过滤数据以及如何处理数据。

    【讨论】:

    • 虽然在创建自己的抽象数据层类时,仅仅使用 mysqli 并没有给您任何我试图指出的优势
    【解决方案3】:
    while ($result = mysql_fetch_assoc($query))
    {    
        // do stuff
    }
    

    【讨论】:

      【解决方案4】:

      有一个叫做Manual http://www.php.net/manual/en/function.mysql-fetch-assoc.php的例子也有(很多)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-10
        相关资源
        最近更新 更多