在重复上给出语法错误,并且不起作用

时间:2019-10-04 17:41:10

标签: php mysql

我正在尝试将产品从XML文件添加到数据库,并且当article number重复时,我只想更新stock级别。 我仍在学习PHP和MySQL,并且在该论坛上阅读了很多文章,但我无法使其正常工作。

所以我是这样做的:

$xml = simplexml_load_file("a-link-to-downloaded_products.xml") or die("Error: Cannot create object");

  foreach ($xml->children() as $row) {
      $article_code = $row->artikelnummer;
      $brand = $row->merk;
      $name_nl = $row->naam;
      $ean = $row->ean; 
      $stock = $row->voorraad_aanwezig; 

      $sql = "INSERT INTO `products` (article_code,brand,name_nl,ean,stock) VALUES ('" . $article_code . "','" . $brand . "','" . $name_nl . "','" . $ean . "','" . $stock . "') ON DUPLICATE KEY UPDATE `stock` = VALUES(`$stock`)";

      $result = mysqli_query($db, $sql);
      ..... etc .....
  }

上面给我一个错误的说法

  

“字段列表”中的未知列“ 1”

  

您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册,以在第1行的'1)'附近使用正确的语法

由于第二个错误,我认为它与ON DUPLICATE KEY UPDATE stock = VALUES($stock)"有关,但是我尝试了许多不同的变体,但我无法使其正常工作!我用了反引号,引号等。几乎所有我能想到的。

1 个答案:

答案 0 :(得分:2)

只需替换一下:

ON DUPLICATE KEY UPDATE `stock` = VALUES(`$stock`)

使用:

ON DUPLICATE KEY UPDATE `stock` = VALUES(`stock`)

说明:VALUES()子句中的ON DUPLICATE UPDATE构造用于引用在INSERT子句中传递的列值。

重要说明:SO上的任何人都会告诉您,您应该真正考虑使用prepared statement and parameterized queries,以便使查询更安全,更有效。