在SQL中使用多个值更新多个列

时间:2013-09-16 07:43:49

标签: php mysql

我有一个包含70多列的表格,所以我该怎么做呢:

mysql_query("update `table` set (`column1`, `column2`, `column3`, `column4`, `column5`, ...`column100`) = ('val1', 'val2', 'val3', 'val4', 'val5', ...'val100') where `anycolumn`='anyvalue'");

所以我将内爆$ _POST数组而不是逐个编写它们:

mysql_query(“更新table设置column1column2column3column4column5,... {{1 }})=(“。implode(',',$ _ POST)。”)其中column100 ='anyvalue'“);

2 个答案:

答案 0 :(得分:1)

我在php中更正了你的语法错误,但查询无效。

$query = "update table set (column1, column2, column3, column4, column5, ...column100) = ('".implode("','",$_POST)."') where anycolumn='anyvalue'";
echo $query;

使用关联数组尝试此解决方案:

<?php

$_POST= array(0,1,2,3);
$params=array(
'column1'=>$_POST['0'],'column2'=>$_POST['1'],'column3'=>$_POST['3']
);

foreach($params as $key=>$value){
    $partQuery[]="$key = $value" ;
}
$query = "update table set( ".implode(' , ',$partQuery)." ) where anycolumn='anyvalue'";
echo $query;
?>

但要注意 sql注入,并尝试使用mysqliPDO而不是mysql_,这已弃用,将来不再受支持php的版本。

答案 1 :(得分:1)

您可以使用UPDATE命令的备用格式

UPDATE table SET
       column1 = 'value1',
       column2 = 'value2',
         :
       column100 = 'value100';

使用此格式,您可以在PHP中构造SQL代码。对于示例: -

$updated_fields = array();
$sql  = 'UPDATE table SET ';
foreach ($_POST as $column => $field) {
    if (isset($field) && strlen($field)) {
        $updated_fields[] = "`".$column."` = '".mysql_real_escape_string($field)."'";
    }
}
$sql  = implode(", ", $updated_fields)."WHERE somecondition = 'somevalue' ";

一些注释

  • 此代码假定所有$ _POST变量都具有相应的变量 数据库专栏。
  • 您必须在WHERE子句之后填写条件。
  • 记下有关SQL注入的评论
  • 使用类似PDO的内容,而不是mysql_ * 命令