【问题标题】:Update over 100 fields in mysql更新 mysql 中的 100 多个字段
【发布时间】:2016-07-17 10:38:27
【问题描述】:

我的数据库中有 181 个字段,名为 S1、S2....S181。我想使用 WITH name="S1", .....NAME="S181" 的输入值更新这些字段。

我的密码是

    $S1=$_POST['S1'];
...
...
    $S181=$_POST['S181'];
  $sql=mysqli_query($conn,"update 'cap' set S1='$S1'......S181='$S181'")

我正在尝试类似的东西

for ($i = 1; $i<=181; $i++ ) {
        $(S$i)=$_POST['S$i'];
        $sql = mysqli_query($conn, "UPDATE  `cap4a` SET
                    S$i='$(S$i)' 
            WHERE IDID=".$id) or die (mysqli_error($conn));
    }

我使用 S$i 的方式有什么问题吗,因为我遇到了错误:

"Parse error: syntax error, unexpected '(', expecting variable (T_VARIABLE) or '$' in C:\xampp1\htdocs\update_cap4a.php on line 5" ?

【问题讨论】:

  • 真正的解决方案是改变你的桌子设计。它有重大缺陷。
  • 请通过突出显示所有代码并单击文本区域菜单栏中的代码图标来修复您的格式。它看起来像{ }。还告诉我们$id 来自哪里?
  • 你的数据在哪里插入,S1= $_POST['S1'] 所有列数据都来自$_POST
  • 抱歉,您的餐桌设计有缺陷。
  • $id=$_POST['id'];为什么我的桌子设计有缺陷?它正在工作,但我需要“FOR”方面的帮助

标签: php mysql for-loop


【解决方案1】:

我认为运行 181 个查询来更改同一行并不是一个好主意。相反,运行一个查询,对行进行所有必需的更改。下面的代码将为您工作:

$id = (int)$_POST['id'];//remove (int) if id IDID is a string
$snippets = [];//holds little snippets eg: S1='value1'
for($i=1;$i<=181;$i++){
    $varname = "S$i"; //S1...S181
    if(!isset($_POST[$varname])) continue;
    $snippets[] = " $varname='$_POST[$varname]' ";
}
$sql = '"UPDATE cap SET '.implode(",",$snippets)." WHERE IDID=$id";
$result = mysqli_query($conn,$sql) or die (mysqli_error($conn));

我没有在这个 sn-p 中介绍它,但在生产中使用它之前,您至少需要添加两件事:

  1. 正确的错误处理,当您的查询失败时
  2. 准备好的语句或转义值以防止 SQL 注入

我使用 S$i 的方式有问题吗

要动态创建一个名为S10 的变量,并在$i=10 时将其设置为“值”,请执行以下操作:

$varname = "S$i";
$$varname = 'value'; // $$varname can also be referred to as $S10

请参阅文档中的 Variable Variables

【讨论】:

    【解决方案2】:

    我会这样做:

    for ($i = 1; $i<=181; $i++) {
        $key = 'S'.$i;
        $value = $_POST[$key];
        $update[] = "`{$key}` = '".$value."'";
    
        $sql = mysqli_query($conn, "UPDATE `cap4a` SET ".join(",",$update)." 
                WHERE IDID=".$id) or die (mysqli_error($conn));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-21
      相关资源
      最近更新 更多