2013-07-29 2 views
1

mysql에서 mysqli로 마이그레이션 중이며 쿼리에서 데이터베이스에서 둘 이상의 행을 반환하는 데 문제가 있습니다.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 

분명히 데이터베이스를 쿼리하고 연관 배열 또는 개체로 결과를 반환 할 수있는 함수를 만들려고합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+1

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

+1

이러한 기능 ** 준비된 문을 지원해야 않거나 사용은 거기에 없다 :

수정입니다 조금도. –

답변

2

사용이 코드 : 당신은 동안과 반환 내부의 반환을 사용하는

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

는 하나의 행을 얻고있는 이유 첫 번째 반복 후 while 루프를 종료합니다.

1

첫 번째 행만 반환합니다. 배열을 반환해야합니다.

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

당신은 배열에 루프 값을 시도하는 동안 저장해야하는이

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

당신이 함수에서 반환하는 경우는 그 시점에서의 실행을 중지하고 값에서 호출 한 곳으로 돌아 간다 당신이 돌아오고 있습니다.

return $ 행을 수행하면 첫 번째 행을 읽 자마자 함수에서 벗어납니다. **

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

} else {  

    while($row = $result->fetch_object()) { 
     $result[] = $row; 
    } 
} 
return $row; 
관련 문제