1

嘿伙计们,我想在 mysql UPDATE 查询中使用两个数组。所以这就是我所拥有的:

例如:

$ergebnis:
Array ( [0] => 100 [1] => 200 [2] => 15 )


$Index:
Array ( [0] => 3 [1] => 8 [2] => 11 )

这就是我尝试过的:

UPDATE `lm_Artikel` 
SET Bestand='".$ergebnis."' 
WHERE `Index` = '".$Index."'

此查询似乎不起作用。我不知道为什么我启用了 php 错误报告并且没有错误,当我运行查询时它不会更改我的数据库中的任何内容。谁能看到我做错了什么?

4

5 回答 5

4

您需要为数组的每个元素执行此操作,因此,您可以使用该foreach()函数:

foreach($ergebnis as $key => $value){
    $sql = "UPDATE lm_Artikel SET Bestand='".$value."' WHERE `Index` = '".$Index[$key]."'";
    mysqli_query($sql);
}

PS很可能有一个纯sql替代方案,但我不太喜欢SQL,所以我会把它留给有更多专业知识的人。

另外,请注意,将索引设置为数组键可能更容易:

$ergebnis = Array(3=>100, 8=>200, 11=>15);

然后foreach()看起来会好一点:

foreach($ergebnis as $key => $value){
    $sql = "UPDATE lm_Artikel SET Bestand='".$value."' WHERE `Index` = '".$key."'";
    mysqli_query($sql);
}
于 2012-11-28T13:16:58.590 回答
3

同学,

看起来您的数据库字段是一个 int 值,因此您可以尝试按值执行它,如下所示:

foreach( $Index as $key => $i ) :

    $query = "UPDATE lm_Artikel SET Bestand=".$ergebnis[$key]." WHERE Index = " . $i;
    mysqli_query($query);

endforeach;

尝试一下。

于 2012-11-28T13:22:10.527 回答
2
  1. 您容易受到SQL 注入的影响
  2. 您不能在查询中使用数组。查询是字符串,数组不是。

您要么需要使用循环,要么使用CASE语句:

UPDATE `lm_Artikel`
SET `Bestandteil` = CASE `Index`
  WHEN <insert id> THEN <insert value>
  WHEN <insert other id> THEN <insert other value>
  <etc>
END
于 2012-11-28T13:19:47.650 回答
1
$data_db = array( '3' => 100,
          '8' => 200,
          '11' => 15);


foreach($data_db as $key=>$value) {
    $q = 'UPDATE lm_Artikel SET Bestand=' . $value . ' WHERE `Index` = ' . $key;
    mysqli_query($sql);
}
于 2012-11-28T13:19:28.297 回答
0

假设这些是值对,即$ergebnis[0]是 for$Index[0]等等。

foreach ($ergebnis as $key => $value) {
    $sql = 'UPDATE lm_Artikel SET Bestand=' . (int)$value . ' WHERE `Index` = ' . (int)$Index[$key];
    // execute query...
}

几点注意事项:

  • 您对SQL 注入持开放态度。我用作(int)快速补丁。
  • 我鼓励您查看Prepared Statements
  • 您应该避免将列命名为 SQL 关键字,例如Index.
于 2012-11-28T13:19:15.533 回答