2011-10-07 118 views
0

我试图更新所有共享相同的字段名称的多行。如何用相同的字段名更新多个mysql数据库行?

的结构是这样的:

+---+-------+--------+ 
|id | name | value | 
+---+-------+--------+ 
| 1 | color | red | 
| 2 | fruit | apple | 
| 3 | day | friday | 
+---+-------+--------+ 

所以,像这样:

$config_data = "UPDATE system_config SET color = '$_POST[color]', fruit = '$_POST[fruit]', day = '$_POST[day]'"; 

$success = mysql_query($config_data); 

...将无法正常工作。我将如何执行此查询?

+0

为后人:不要'“UPDATE system_config SET color ='“.mysql_real_escape_string($ _ POST [color])。”',等等...'还有*验证*输入优先 – webbiedave

+1

这本质上是一个不可行的设计。表格是查询和性能最差的。我会用规范化的方式正确地设计我的表格。 – HLGEM

+0

我没有得到它...一个WordPress博客的选项表有超过150个这样的结构,但每个人都问我为什么这样做,并说没有人这样做。我究竟做错了什么?如果我有100个配置选项,存储它们的最佳方式是什么? – Oseer

回答

2

尝试

$config_data = "UPDATE system_config SET value = '$_POST[color]' WHERE name = 'color';"; 
$success = mysql_query($config_data); 
$config_data = "UPDATE system_config SET value = '$_POST[fruit]' WHERE name = 'fruit';"; 
$success = mysql_query($config_data); 
$config_data = "UPDATE system_config SET value = '$_POST[day]' WHERE name = 'day'"; 
$success = mysql_query($config_data); 

instead.It的必要投入更多的查询,在这种情况下

+0

男人,我试图在一个查询中得到它。我有15-20个值在一个表单中更新。 – Oseer

+1

@ user971230:*现在*您告诉我们。编辑您的问题以反映所有相关信息。 – webbiedave

0
update system_config 
set value = 
case 
when name = 'color' then 'something1' 
when name = 'fruit' then 'something2' 
when name = 'day' then 'something3' 
else value 
end 
+0

正如所写的,这覆盖了配置名称而不是配置值。我试着当name ='language',然后value ='$ _POST [语言]',但它不起作用。 – Oseer

+0

啊,对不起。误解。编辑我的答案。 –

+0

我把帖子价值放在你有'something1'等等。我做错了什么? '当name ='language',然后'$ _POST [language]''。你的建议看起来不错,只是没有更新任何东西。 – Oseer

相关问题