1

mysql から mysqli に移行していますが、クエリでデータベースから複数の行を返すのに問題があります。

$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

私は明らかに、データベースにクエリを実行し、結果を連想配列またはオブジェクトとして返すことができる関数を作成しようとしています。私は何を間違っていますか?

4

5 に答える 5

2

次のコードを使用します。

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

while 内で return を使用しており、return は最初の反復後に while ループを終了するため、1 行しか取得していません。

于 2013-07-29T12:46:09.023 に答える
2

while ループの値を配列に格納する必要があります これを試してください

$rows = array();
if ($type == 'assoc') {
    while($row = $result->fetch_assoc()) {
      $rows[] = $row;
    }
} else {    
    while($row = $result->fetch_object()) {
      $rows[] = $row;
    }   
}
return $rows;
于 2013-07-29T12:47:13.207 に答える
2

関数に戻ると、その時点で実行が停止し、返された値で呼び出された場所に戻ります。

あなたの場合、return $row を実行すると、最初の行が読み取られるとすぐに関数から抜け出します。

修正は次のとおりです。

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

} else {    

    while($row = $result->fetch_object()) {
      $result[] = $row;
    }   
}
return $row;
于 2013-07-29T12:47:15.310 に答える
1

最初の行のみを返しています。配列を返す必要があります。

于 2013-07-29T12:43:42.500 に答える
1
$arr = array();
if ($type == 'assoc') {
  while($row = $result->fetch_assoc()) {
    $arr[] = $row;
  }
}
else {    
  while($row = $result->fetch_object()) {
    $arr[] = $row;   
  }
}
return $arr;
于 2013-07-29T12:47:06.457 に答える