2013-03-07 141 views
0

我有一個表具有以下結構插入問題 - 的MySQL通過PHP

 Bay | Slot1 | Slot 2 | Slot 3 | Slot 4 | Slot 5 
    ----------------------------------------------- 
     1 | time1 | time 2 | time 3 | time 4 | time 5 

下面的代碼被用於插入:

for ($i =1; $i <= $bayCount; $i++) { 
    mysql_query("INSERT INTO $tableName (Bay) VALUES ($i)"); 

    for ($j=0; $j<$slotCount ; $j++) { 
     echo $i; 
     echo $_slotColumns[$j]; 
     mysql_query("INSERT INTO $tableName ($_slotColumns[$j]) VALUES (slotValues[$j]) WHERE Bay = $i "); 
    } 

    } 

海灣是增量種類和值的整數對於插槽作爲數組傳遞(slotValues [$ j])使用for循環插入來生成插槽列。插槽值是文本類型。有人能告訴我發生了什麼事嗎?插槽值插入但不是插槽值。我做錯了什麼?

+0

您應該查看SQL語法的基礎知識。 'INSERT'向數據庫添加一個新行,並且沒有'WHERE'。你需要的是'更新'。儘管一次創建整個查詢會更好。最好的辦法是手動寫出完整的查詢,然後檢查需要更改的部分。不推薦使用'mysql_query'。看看'mysqli'或'PDO' – 2013-03-07 09:57:54

+0

這是哪個循環中的'slotColumns'和'slotValues'的值? – Alvaro 2013-03-07 09:57:59

+0

@Steve我把數字5作爲插槽計數迭代以得到插槽列和插槽值是time1時間2 ... – DesperateLearner 2013-03-07 11:21:59

回答

1

在第二個INSERT語句中刪除WHERE Bay = $ i,它將始終爲假,因爲它不存在。在這種情況下,你不能在INSERT查詢中使用WHERE,因爲它總是返回false。

你也忘了在slotValues前放一個$符號。 在字符串中使用數組時,應始終將{}放在它們周圍。 (例如{$ _slotColumns [$ J]}

for ($i =1; $i <= $bayCount; $i++) { 
mysql_query("INSERT INTO $tableName (Bay) VALUES ($i)"); 

for ($j=0; $j<$slotCount ; $j++) { 
echo $i; 
echo $_slotColumns[$j]; 
mysql_query("INSERT INTO $tableName ({$_slotColumns[$j]}) VALUES ({$slotValues[$j]})"); 
} 
} 

或者,如果你想更新,而不是添加新記錄的每一列插入的海灣中的字段,你可以按如下方式使用更新查詢:

for ($i =1; $i <= $bayCount; $i++) { 
    mysql_query("INSERT INTO $tableName (Bay) VALUES ($i)"); 

    for ($j=0; $j<$slotCount ; $j++) { 
    echo $i; 
    echo $_slotColumns[$j]; 
    mysql_query("UPDATE $tableName SET {$_slotColumns[$j]} = {$slotValues[$j]} WHERE Bay = $i;"); 
    } 
} 
+0

mysql_query(「UPDATE $ tableName SET $ _slotColumns [$ j] ='$ slotValues [$ j] 'WHERE Bay ='$ i'「);這工作!更新和不插入!非常感謝大家的幫助 – DesperateLearner 2013-03-07 11:27:24

0

當您在「」中使用數組變量時,請嘗試將它們放入{}中。 {$ _slotcolumns [$ j]}

1

我想你應該更新評價者比在第二個循環插入。 GL!

0

你可能有行情的一個問題:

mysql_query("INSERT INTO $tableName (".$_slotColumns[$j].") VALUES ('".slotValues[$j]."') WHERE Bay = $i "); 

或者你的也做:

mysql_query("INSERT INTO $tableName ({$_slotColumns[$j]}) VALUES ('{slotValues[$j]}') WHERE Bay = $i "); 

你必須注意到一個正常的查詢需要的報價是這樣的:

mysql_query("INSERT INTO $tableName (columnName) VALUES ('value') WHERE Bay = $i "); 
0

你有兩個獨立的插入,所以你獲得兩個獨立行,第一個將只包含灣。

它看起來像你對我想一個查詢:

$query = "INSERT INTO $tableName (Bay, " . implode(',', $_slotColumns) . ") "; 
$query .= "VALUES(" . implode(',', $slotValues). ")"; 
mysql_query($query); 

我不知道你想用WHERE做什麼;這對INSERT沒有意義。