php
  • mysqli
  • 2016-09-01 4 views 2 likes 
    2

    Я пытаюсь сделать одну переменную ($ order_description) эхо 27 строк из моей базы данных, используя следующий код:Возвращаясь более одной строки с MySQLi

    $sql_query1 = "SELECT order_description FROM single_user_orders WHERE username = '". $_SESSION['login_user'] ."'"; 
    $result1 = mysqli_query($dbconfig, $sql_query1); 
    $row1 = mysqli_fetch_array($result1, MYSQLI_ASSOC); 
    $count1 = mysqli_num_rows($result1); 
    
    if($count1 >= 1) { 
        while ($row1 = $result1->fetch_assoc()) { 
         $order_description = $row1['order_description']; 
        } 
    } 
    

    Хотя этот код работает, когда я <?php echo $order_description; ?> возвращается последнюю строку инструкции SELECT, а не 27 строк, которые я должен видеть, где я ошибаюсь?

    +0

    Ваш «ошибка» находится в пределах цикла. Вы читаете все строки, но присваиваете их одной и той же переменной. При этом следующий заменяет первый с каждым прогоном этого цикла. Это оставляет последнюю строку в переменной, когда цикл завершается. – RST

    +0

    использование mysql group_concat в запросе и функция php explode в коде. посмотрите на мой ответ –

    ответ

    1

    Чтобы посмотреть все 27 описания, вам необходимо либо распечатать их в цикле, либо добавить их в массив. Когда вы запустите цикл и выпустите одну переменную только после того, как цикл закончится, он отобразит последнее назначенное значение.

    while ($row1 = $result1->fetch_assoc()) { 
        $order_description = $row1['order_description']; 
        echo $order_description."\n"; 
    } 
    

    ИЛИ

    while ($row1 = $result1->fetch_assoc()) { 
        $descriptions[]=$row1['order_description']; 
    } 
    print_r($descriptions); 
    

    Примечание

    @RiggsFolly справедливо заметил, что у вас есть один дополнительный fetch_array вызов, который получает впустую, и, следовательно, вы никогда не увидите первую строку. Избавься от этого.

    Кик третья строка кода

    $row1 = mysqli_fetch_array($result1, MYSQLI_ASSOC); 
    
    +0

    Можете также предупредить его, что первая строка '$ row1 = mysqli_fetch_array ($ result1, MYSQLI_ASSOC);' потеряет его в первой строке – RiggsFolly

    +0

    Это сработало. :) –

    +0

    Как бы вы могли получить первую строку? –

    1

    использование ниже способом с GROUP_CONCAT и читать комментарии

    $sql_query1 = "SELECT group_concat(order_description separator ',') as order_description FROM single_user_orders WHERE username = '". $_SESSION['login_user'] ."'" ; // update thie query with group_concat 
    $result1 = mysqli_query($dbconfig, $sql_query1); 
    $count1 = mysqli_num_rows($result1); 
    $order_description = array(); 
    if($count1 >= 1) { 
        while ($row1 = $result1->fetch_assoc()) { 
         $order_description = explode(',',$row1['order_description']); // explode the string 
        } 
    
    } 
    
    print_r($order_description); 
    
    Смежные вопросы