2016-02-08 6 views
4

У меня есть это в моем файле functions.phpВозвращение нескольких строк массива из Mysqli запроса

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 массив как этот фрагмент предлагает

$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(); 

, которая не является хорошим, так как мне нужно, чтобы переработать функцию где-то еще и отображать различные поля и их значения. Поэтому мне нужно, чтобы $ odr возвращался как массив в моем order.php

+0

Вопросы и проблемы с ответами? – chris85

ответ

5

Хранить его как массив, а затем возвращать массив.

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, поэтому я не думаю, что это было ваше точное использование.

+0

Просто nitpicking, но должен, вероятно, включать OPs '$ userId = sql_prep ($ _ SESSION ['userid']);' поскольку, похоже, у них есть небольшая санитария, вместо прямой вставки в 'getUserOrders()' – Sean

+0

@Sean true , У меня есть обновление для использования подготовленных операторов. Благодарю. – chris85

0

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>'; 
} 
Смежные вопросы