2010-06-15 1 views
1

왜 데이터베이스에 단 1 행이 메모리 부족 오류를 던지는이 코드 ..의 MySQL 및 PHP 동안 코드는 하나 개의 행이있을 때, 메모리가 부족

$request_db = mysql_query("SELECT * FROM requests 
       WHERE haveplayed='0'") or die(mysql_error()); 
       $request = mysql_fetch_array($request_db); 
       echo "<table border=\"1\" align=\"center\">"; 
       while ($request['haveplayed'] == "0") { 
        echo "<tr><td>"; 
        echo $request['SongName']; 
        echo "</td><td>"; 
        echo "<tr><td>"; 
        echo $request['Artist'];  
        echo "</td><td>"; 
        echo "<tr><td>"; 
        echo $request['DedicatedTo']; 
        echo "</td><td>"; 
       } 
       echo "</table>"; 

감사합니다.

답변

3

흠, 솔직히 말해서, 나는이 경우 while의 사용을 이해하지 못합니다. DB에 행이 하나 더 있어도이 코드로 한 행만 가져 오는 것입니다. 어쩌면 당신은 if($request['haveplayed'] == 0)과 같은 것을 시도했으나, 쿼리가 단지 haveplayed과 같은 행을 반환하기 때문에 0과 같은 의미를 가지지 않을 것입니다.

내가 알 수있는 한, haveplayed0requests 테이블에서 하나 이상의 행을 출력하려고합니다. 그러면 더 좋을까요?

$request_db = mysql_query("SELECT * FROM requests WHERE haveplayed='0'") 
       or die(mysql_error()); 

while($request = mysql_fetch_array($request_db)) { 
    // output stuff here ... 
    echo $request['SongName']; 
} 
+0

... 나는 그런 바보입니다. 고맙습니다 :). 내 자신의 코드를 인식하는 능력이없는 또 하나의 오류는 간단한 구문 오류 이상입니다. 내 코드가 때때로 이와 같이 중복됩니다 ... 감사합니다. – Sam

3

그래서 PHP

에서
null == 0 == '0' 

때문에

while (isset($request['haveplayed']) && $request['haveplayed'] == '0') 

또한

사용 '==='운영자 또는 더 나은 아직 '는 isset()의 사용을 루핑 while이 코드에서는 매우 쓸모가 없습니다. 아마 루프 내부에 새로운 배열을 가져오고 싶을 수도 있습니다.

+0

그래서 'foreach'로 'while'을 바꾸고 기존 코드를 유지하십시오. 'haveplayed'의 기본값은 실제로 0입니다. – Sam

+0

내 데이터베이스에는 결국 haveplayed = "1"이 가능합니다. – Sam

+0

내가보기에, 고맙습니다. :). – Sam

0

너무 많은 노력을 들이지 않고 어떤 데이터 유형이 재생 되었습니까? while 루프가 만족스럽지 않으므로 대신 다음을 시도해보세요.

$request_db = mysql_query("SELECT * FROM requests 
       WHERE haveplayed='0'") or die(mysql_error()); 
       $request = mysql_fetch_array($request_db); 
       echo "<table border=\"1\" align=\"center\">"; 
       while ($request['haveplayed'] == 0) { 
// or   while ($request['haveplayed'] == false) { 
        echo "<tr><td>"; 
        echo $request['SongName']; 
        echo "</td><td>"; 
        echo "<tr><td>"; 
        echo $request['Artist'];  
        echo "</td><td>"; 
        echo "<tr><td>"; 
        echo $request['DedicatedTo']; 
        echo "</td><td>"; 
       } 
+0

하지만 기본값을 '0'으로 설정했습니다. – Sam

+0

나는 당신이 말한 것을 시도해 봤는데, 여전히 내게 500 에러 (메모리 부족)를 내고있다. – Sam

+0

내 데이터베이스에서 결국은 "haveplayed ="1 "이 가능할 것이다. – Sam

1

여기에는 무한 루프가 있기 때문에입니다. while 문은 데이터베이스에서 꺼내는 유일한 작업이기 때문에 항상 true입니다. 해본 상태는 항상 '0'이므로 값이 변경되지 않으므로 중지되지 않습니다. Bascially, 당신은 while 루프가 전혀 필요하지 않습니다. 데이터베이스에서 꺼내는 유일한 것들이 조건부로 체크인하는 것입니다.

어쩌면 foreach ($request as $r)?

+0

내 데이터베이스에는 결국 aplayplayed = "1" – Sam

+0

오, 알았어, 고마워. – Sam