php - mysql/php 在重复键上插入/更新

标签 php mysql

我有一个包含 130 多个列/字段的产品信息表。

我想编写一个 php 脚本,将新产品添加到表中,或者更新现有产品(如果它已经存在)。第一个字段是产品 key 。

产品信息存储在一个带编号的 php 数组中:$product_info[0] 到 $product_info[130]。

基本上是这样的:

INSERT INTO table (a,b,c) VALUES ($product_info[0],$product_info[1],$product_info[2])
  ON DUPLICATE KEY UPDATE a='$product_info[0]', b='$product_info[1]', c='$product_info[2]'

有什么比将 130 个字段中的每一个输入两次更有效的方法吗?

最佳答案

是的,有,使用 VALUES()功能:

INSERT INTO `table` (a, b, c) VALUES (?, ?, ?)
    ON DUPLICATE KEY UPDATE a = VALUES(a), b = VALUES (b), c = VALUES(c)

基本上,在 UPDATE 部分中,VALUES(column) 将为相关的当前行返回该列的指定值。所以你可以做一些有趣的事情,比如:

ON DUPLICATE KEY UPDATE 
    a = VALUES(a), 
    b = VALUES(b) + VALUES(c), 

这种语法的美妙之处在于它还支持多个插入行:

INSERT INTO `table` (a, b, c) 
    VALUES (?, ?, ?), 
    VALUES (?, ?, ?), 
    VALUES (?, ?, ?)
    ON DUPLICATE KEY UPDATE a = VALUES(a), b = VALUES (b), c = VALUES(c)

关于php - mysql/php 在重复键上插入/更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3478350/

相关文章:

php - 预期对象 - IE7 和 8

php - 在提出内存问题之前,php 数组可以有多大?

mysql - NORMSINV函数在MySQL中的实现

php - 在第一个表插入时更新第二个表的 SQL 语法

javascript - 如何收集动态添加的行(HTML 表格)的值(数据)?使用 php 和 XAMPP

mysql - 在 Access 中为链接表选择 @@Identity 返回 0

php - 可捕获的 fatal error : Object of class DateTime could not be converted to string

php - Laravel 查询异常/SQLSTATE[42S02]

JavaFx TableView 未获取数据

php - Javascript onclick 与 getElementById 不起作用