2013-07-29 4 views
1

Je migre de mysql vers mysqli et j'ai du mal à renvoyer plus d'une ligne de la base de données dans une requête.Requête mysqli retournant uniquement la première ligne

$db = new mysqli($hostname, $sql_us, $sql_us_pwd, $sql_db); // This is already connected 

function db_query($db, $query, $type = 'object') { 

    global $db; 

    $result = $db->query($query); 

    if ($type == 'assoc') { 
     while($row = $result->fetch_assoc()) { 
      return $row; 
     } 
    } else {  
     while($row = $result->fetch_object()) { 
      return $row; 
     } 
    } 

    mysqli_free_result($result); 

} 



$query = "SELECT * FROM `users`"; 
$user = db_query($db, $query); 
print_r($user); // This is only returning the first row of results 

J'essaie évidemment de faire une fonction où je peux interroger la base de données et soit renvoyer les résultats dans un tableau associatif ou comme un objet. Qu'est-ce que je fais mal?

+1

http://php.net/manual/en/function.return.php –

+1

Une telle fonction doivent soutenir ** ** ou instructions préparées il n'y a pas l'utilité du tout. –

Répondre

2

Utilisez ce code:

$rows = array(); 
if ($type == 'assoc') { 
    while($row = $result->fetch_assoc()) { 
     $rows[] = $row; 
    } 
} else {  
    while($row = $result->fetch_object()) { 
     $rows[] = $row; 
    } 
} 
return $rows; 

Vous utilisez le retour à l'intérieur du temps et le retour se termine la boucle while après la première itération qui est la raison pour laquelle vous obtenez une seule ligne.

1

Vous ne renvoyez que la première ligne. Vous devez retourner un tableau.

1
$arr = array(); 
if ($type == 'assoc') { 
    while($row = $result->fetch_assoc()) { 
    $arr[] = $row; 
    } 
} 
else {  
    while($row = $result->fetch_object()) { 
    $arr[] = $row; 
    } 
} 
return $arr; 
2

Vous devez stocker tandis que les valeurs de boucle dans un tableau essayer cette

$rows = array(); 
if ($type == 'assoc') { 
    while($row = $result->fetch_assoc()) { 
     $rows[] = $row; 
    } 
} else {  
    while($row = $result->fetch_object()) { 
     $rows[] = $row; 
    } 
} 
return $rows; 
2

Lorsque vous revenez dans une fonction, il arrête l'exécution à ce moment-là et remonte à l'où il a été appelé à partir de la valeur que vous revenez.

Dans votre cas lorsque vous renvoyez une ligne $, vous sortez de la fonction dès que la première ligne est lue.

Fix est:

$result = array(); 
if ($type == 'assoc') { 
    while($row = $result->fetch_assoc()) { 
     $result[] = $row; 
    } 

} else {  

    while($row = $result->fetch_object()) { 
     $result[] = $row; 
    } 
} 
return $row; 
Questions connexes