2012-05-08 79 views
0

我從一個表中生成了一個隨機怪物團隊,並且受限於6.現在,我還想將團隊插入user_team,其中包含字段 m1,m2,m3,m4,m5 ,m6PHP - 在循環中插入SQL

那些代表怪物1到怪物6.現在,當我嘗試將生成的怪物插入團隊時,只有最後一個怪物似乎插入到它,而我插入所有的怪物。 http://prntscr.com/8zrj2

$sql = "SELECT * from monsterdata ORDER BY RAND() LIMIT 6"; 
$result = mysql_query($sql); 
// this checks if you have a result 
if ($result == null) echo "No result"; 
else { 
    while (($row = mysql_fetch_array($result)) != false) { 
$row = mysql_fetch_array($result); 
{ 
// html code here 
} 
} 

INSERT語句 $monster = $row['id']; $sql = "INSERT into user_team(m1,m2,m3,m4,m5,m6) VALUES('$monster','$monster','$monster','$monster','$monster','$monster')"; $result = mysql_query($sql);

只是不知道在哪裏/如何使它插入正確的價值觀進右列放置。

回答

0

如果是我的話,我將推動IDS到一個數組,然後用它像這樣:

$monsterIds = array(); 
while(($row = mysql_fetch_array($result)) !== false) { 
    $monsterIds[] = $row['id']; 
} 
mysql_query("INSERT INTO user_team (m1, m2, m3, m4, m5, m6) VALUES ('{$monsterIds[0]}', '{$monsterIds[2]}', '{$monsterIds[3]}', '{$monsterIds[4]}', '{$monsterIds[5]}')") or die(mysql_error()); 

另外,不要忘了比較列的結果,這樣,當使用三重等號你不不會被一個奇怪的bug捕獲,其中的事情評估爲false,實際上並不是false(===是許多可能返回數組,整數或布爾值的函數的方式,取決於結果)。

這些值將按照它們提供的順序放置在列中。

+0

我試過了,事情是這樣的。 http://prntscr.com/8zst9 這應該是一個單一的,它不會插入所有6! :(感謝您的幫助,雖然! –

+0

忘了提及它給出了一個未定義的偏移量:1到5 @LosFrijoles –

+0

這意味着要完全替代你的while循環,它看起來像你的粘貼,你在while循環中部分運行(因此獲得ids的對角線模式)未定義的偏移量正在發生,因爲它還沒有達到最終目的,在你可以對數據做任何事情之前,循環必須完成 –

0

下面是一個使用PDO(PHP庫)我的例子:

$DBH = new PDO("mysql:host=$db_host;dbname=$db_name", $username, $password); 
$webContractList=$DBH->query('SELECT id,nume,data FROM user2')->fetchAll(); 

$STH=$DBH->prepare("INSERT INTO user (id,nume,data) VALUES (:id ,:nume , :data)"); 

foreach ($webContractList as $item){   
    $STH->execute(array(':id'=>$item['id'], 
       ':nume'=>$item['nume'], 
       ':data'=>date('Y-m-d',strtotime($item['data'])))); 
}