-1

我有一个超过 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集 ( column1, column2, column3, column4, column5, ... column100) = (".implode(', ',$_POST).") where anycolumn='anyvalue'");

4

2 回答 2

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注入,尝试使用mysqliorPDO来代替mysql_,已经弃用了,以后的php版本将不再支持。

于 2013-09-16T07:49:30.227 回答
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_ *命令
于 2013-09-16T08:04:56.383 回答