2011-11-27 4 views
-2

다음 코드로 MySQL의 행을 순환하려고합니다. 아쉽게도 mysql_fetch_row 함수는 내 쿼리의 첫 번째 행만 반환합니다 (print_r을 사용하여 확인했습니다). mysql_num_rows을 사용하면 해당 쿼리 (2)에 대한 올바른 행 수가 반환됩니다. 어떤 이유에서 mysql_fetch_row이 첫 번째 행만 반환하는지 알 수 있습니까?mysql_fetch_row가 전체 배열을 반환하지 않습니다.

$query = 'SELECT firstName FROM profiles WHERE city="Phoenix" and lastName ="Smith"'; 
$result = mysql_query($query); 
$row = mysql_fetch_row($result); 
print_r($row); //This returns only 1 array item: Array ([0] => John) 

$a=mysql_num_rows($result); 
print_r($a); //This returns 2 

나는 또한 MySQL에서 동일한 쿼리를 실행했으며 두 행 ("John"과 "Jim")을 반환합니다.

도움 주셔서 감사합니다.

+1

답장을 보내 주셔서 감사합니다. mysql_fetch_row는 한 번에 1 행만 반환한다는 것을 잊었다. while 루프를 사용하여 완벽하게 작동했습니다. – user732027

+1

특정 답변에서이 답변을 제공 한 경우 그 답을 승인 된 것으로 표시해야합니다 (답의 왼쪽에있는 녹색 확인란을 클릭). – casperOne

답변

3

mysql_fetch_row을 두 번 (또는 반복하여) 수행하십시오. 정의에 따르면 (설명서를 읽은 경우) 한 번에 하나의 행만 반환됩니다. 따라서 :

while ($row = mysql_fetch_row($result)) { 
    var_dump($row); 
} 
2

당신은 while 루프에 넣어하려는 :이 무엇

while ($row = mysql_fetch_array($result)) { 

    $firstName = $row['firstName']; 

    echo("$firstName<br />"); 

} 

은 당신이 원하는 데이터를 가져와 표시합니다, 그것은 발견 각 결과 (행)입니다. 따라서 첫 번째 결과를 가져 와서 이름을 표시하고 맨 위로 루프를 돌아가고 두 번째 결과를 가져오고 그 이름을 표시 한 다음 쿼리 기준과 일치하는 결과가 더 이상 없으면 while 루프가 종료됩니다.

+0

왜 변수 이름 주위에'''를 넣을까요?'echo $ firstName;'는 더 짧고 더 읽기 쉽습니다. – zerkms

+0

무엇보다 나쁜 습관 :/ – Joe

1

PHP는 버퍼링 된 순서대로 SQL 결과에 액세스합니다. 모든 내용에 액세스하려면 루프를 실행해야합니다.

당신은 배열로 모든 것을로드 할 경우 한 다음

$allRows=array(); 
while($row=mysql_fetch_assoc($result) { 
    $allRows[]=$row; 
} 
+0

"버퍼링 된"에 대해 말하는 것이 가장 좋은 생각인지 모르겠습니다. 결과는 mysql이 리턴 한 순서대로 접근된다. 즉, imho가 더 좋다. – zerkms

+0

mysql_query() 함수는 PHP 핸들에 대한 액세스를 제공하기 전에 모든 결과를 먼저 버퍼링한다. mysql_unbuffered_query()는 첫 번째 행을 사용할 수있게되는 즉시 액세스를 제공하고 그 다음에 행을 사용할 수있을 때 것입니다. 이것은 내가 버퍼링 된 방법을 의미하는 것입니다. – matsko

+0

내가 말했듯이 ** 현재의 PHP 구현에 대해서 언급 할 이유가 없습니다. ** 내일은 * 변경할 수 있습니다. "데이터가 정확한 순서로 반환됩니다 mysql이 그것을 반환합니다"진술은 변경되지 않습니다 – zerkms

1

당신이 중 하나를 사용할 수 있습니다

while ($row = mysql_fetch_array($result)) 
{ 
    echo $row['firstName']; 
} 

또는

while ($row = mysql_fetch_assoc($result)) 
{ 
    echo $row['firstName']; 
} 

또는

while ($row = mysql_fetch_object($result)) 
{ 
    echo $row->firstName; 
} 
관련 문제