2013-11-09 73 views
0

我從我的表中抓取兩個隨機行。然後我想比較它們以確保它們不是同一行。如果他們是我想繼續選擇一個隨機行,直到我接觸,這是不一樣的。試圖比較PDO語句

目前我正在選擇隨機行罰款我的問題出現時,我打while循環試圖獲得不同的行。我得到以下錯誤「調用一個成員函數取()一個非對象」

for ($i = 1; $i <= $cycles; $i++) { 
     $t1 = $dbtemp->query("SELECT * FROM `test` ORDER BY RAND() LIMIT 1"); 
     $t2 = $dbtemp->query("SELECT * FROM `test` ORDER BY RAND() LIMIT 1"); 
     $winner = $t1->fetch(PDO::FETCH_ASSOC); 
     $loser = $t2->fetch(PDO::FETCH_ASSOC); 
     if($winner['id'] == $loser['id']) { 
      while($winner['id'] == $loser['id']) { 
       $t2 = $dbtemp->query("SELECT * FROM `content` ORDER BY RAND() LIMIT 1"); 
       $loser = $t2->fetch(PDO::FETCH_ASSOC); // Error occurs on this line 
      } 
     } 

如何,我應該還是會去使這項工作將是巨大的任何建議。

+0

哪行做的錯誤呢? –

+0

@HenriqueBarcelos查看評論。 –

+0

'$ t2'顯然是'FALSE'。在執行任何查詢並捕獲錯誤之前,請設置$ dbtemp-> setAttribute(PDO :: ATTR_ERRMODE,PDO :: ERRMODE_EXCEPTION);; –

回答

3

你爲什麼不這樣做:

$t1 = $dbtemp->query("SELECT * FROM test ORDER BY RAND() LIMIT 2"); 

然後:

$players = $t1->fetchAll(PDO::FETCH_ASSOC); 
$winner = $players[0]; 
$loser = $players[1]; 
+0

+1 [** KISS **](http://en.wikipedia.org/wiki/KISS_principle)保持簡單愚蠢 –

+0

@davidstrachan談到簡單,我很好奇,如果有人注意到* for循環*外部。裏面的while循環。 –

+0

@YourCommonSense KISS for Answer.No需要for循環。 –