【问题标题】:Can't update array value in mysql无法更新mysql中的数组值
【发布时间】:2024-04-15 03:40:01
【问题描述】:

我不确定我的查询有什么问题,因为我无法使用最新值更新我的数据库,但我可以 (print_r) 该值。

$serial[$i]= $_POST['serial'][$i];
print_r($serial);
$a = array(1,2,3,4,5,6);
print_r( $a);

$i=0;
 $i=0;
foreach($serial as $s => $m){
      $sqlw = "update speciform set nam5 = '$m[$i]' where nn = '$a[$i]' AND 
      nam11= CURDATE()";
      mysql_query($sqlw) or die(mysql_error());
$i++;
    }

下面是我的更新表格(HTML 和 PHP):

Update Table

当我回显 $serial 时,我得到了这个:-

echo $serial

当我回显 $a 时,我得到了这个:-echo $a

而我的数据库是这样的:-Database Table

真的需要有人帮助我,因为我目前对这个问题一无所知。

【问题讨论】:

  • 请了解Prepared statements。您当前的查询非常容易受到 SQL 注入漏洞的影响
  • @MadhurBhaiya tq 为您的 cmets。我会尽快了解的。

标签: mysql arrays post foreach sql-update


【解决方案1】:

foreach($serial as $s => $m) { ... } 将按照您的预期循环遍历数组 $serial

如果你写:

foreach($serial as $s => $m)
{
    echo $m;
}

您会注意到,在每次迭代中,都会显示 test1 test2 test3 等等。

由于$m 是一个字符串,$m[0] 是第一个字符。因此,$m[$i] 将在第一次迭代时显示第一个字符,在第二次迭代时显示第二个字符,依此类推...

$sqlw = "UPDATE speciform SET nam5 = '" . $m . "' WHERE nn = '" . $a[$i] . "' AND nam11= CURDATE()";

此查询容易受到SQL injections 的攻击,但这是另一个主题。我强烈建议您清理用户输入。永远不要相信用户。

【讨论】:

  • 太棒了!!谢谢,谢谢,谢谢!!我向你学习这个。非常感谢,它的作品!好的,我也将学习 SQL。 :)
【解决方案2】:
$sqlw = "update speciform set nam5 = '$m[$i]' where nn = '$a[$i]' AND 
      nam11= CURDATE()";

更改此查询

$sqlw = "update speciform set nam5 = '$m' where nn = '$a[$i]' AND 
  nam11= CURDATE()";

因为你已经采取了 foreach 循环,所以单个元素的数组是他们唯一在 $m 中的。

【讨论】: