从 mysqli 查询返回数组的多行

Posted

技术标签:

【中文标题】从 mysqli 查询返回数组的多行【英文标题】:Return multiple rows of an array from a mysqli query 【发布时间】:2016-05-17 14:38:05 【问题描述】:

我的functions.php文件中有这个

function getUserOrders($userId)
    global $conn;
    $query = "SELECT * ";
    $query .= "FROM orders ";
    $query .= "WHERE userid=" . $userId . " ";      
    $odrset = mysqli_query($conn, $query);  

    while ($odr = mysqli_fetch_assoc($odrset))
        return $odr;
     

我需要在我的 orders.php 文件中做的是显示返回的 $odr 数组中的特定字段及其值,正如这个 sn-p 所建议的那样

$userId = sql_prep($_SESSION['userid']) ;
getUserOrders($userId);
echo $odr['title'].$odr['orderid'].'<br>'

我只能在functions.php文件中做...

function getUserOrders($userId)
    global $conn;
    $query = "SELECT * ";
    $query .= "FROM orders ";
    $query .= "WHERE userid=" . $userId . " ";
    $odrset = mysqli_query($conn, $query);
    confirm_query($odrset);

    while ($odr = mysqli_fetch_assoc($odrset))
        echo $odr['title'].$odr['orderid'].'<br>';
     

..并在我的 orders.php 文件中调用它,如下所示:

$userId = sql_prep($_SESSION['userid']) ;
getUserOrders();

这不好,因为我需要在其他地方回收该函数并显示不同的字段及其值。所以我需要在我的 order.php 中将 $odr 作为数组返回

【问题讨论】:

对答案有疑问或问题? 【参考方案1】:

将其存储为数组,然后返回该数组。

function getUserOrders($userId)
    global $conn;
    $query =
      "SELECT * 
         FROM orders 
        WHERE userid= ?";    
    $odrset = mysqli_prepare($conn, $query);
    mysqli_stmt_bind_param($odrset, 'i', $userId);
    mysqli_stmt_execute($odrset);

    while ($odr = mysqli_fetch_assoc($odrset))
        $return[] = $odr;
    
    return $return;

我已更新您的mysqli 连接以使用带有预准备语句的参数化查询。你可以在这里阅读更多关于这些的信息,http://php.net/manual/en/mysqli.quickstart.prepared-statements.php。这是比逃跑更受欢迎的方法。

以后使用...

$orders = getUserOrders($_SESSION['userid']);
foreach($orders as $order) 
     echo $order['title'] . $order['orderid'];

您可能不需要使用这种方法的sql_prep 函数,我不确定它做了什么。您的问题代码没有将 userid 传递给函数,所以我认为这不是您的确切用法。

【讨论】:

只是吹毛求疵,但可能应该包括 OPs $userId = sql_prep($_SESSION['userid']) ;,因为看起来他们有一些小卫生,而不是直接插入 getUserOrders() @Sean true,我已经更新为使用准备好的语句。谢谢。【参考方案2】:

mysqli_fetch_assoc 一次只返回一条记录,因此您需要将结果存储在一个数组中并从函数中返回该数组:

// functions.php
function getUserOrders($userId)
    global $conn;
    $query = "SELECT * ";
    $query .= "FROM orders ";
    $query .= "WHERE userid=" . $userId . " ";      
    $odrset = mysqli_query($conn, $query);  

    $results = array();
    while ($odr = mysqli_fetch_assoc($odrset))
        $results[] = $odr;
    

    return $results;



// in your orders file
$userid = sql_prep($_SESSION['userid']);
$orders = getUserOrders($userid);

foreach ($order as $orders) 
    echo $order['title']. $order['orderid'] . '<br>';

【讨论】:

以上是关于从 mysqli 查询返回数组的多行的主要内容,如果未能解决你的问题,请参考以下文章

PHP mysqli - 从准备好的语句返回关联数组

MSSQL 将多行返回到数组中,每行分解为一个数组

如何从具有多行的 SQL 查询中获取非字符串数组字段

PHP - 在 mysqli 查询中使用数组

PHP点滴记录

PHP点滴记录