2013-03-07 143 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没有意义。