【问题标题】:Insert Into on DUPLICATE KEY Update error在 DUPLICATE KEY 更新错误时插入
【发布时间】:2012-10-05 11:52:10
【问题描述】:

我使用 php 表单向导来更新表单上的 mysql 数据库。 PHP 表单向导只执行 INSERT INTO 但是所以我搜索了互联网并找到了 DUPLICATE KEY UPDATE 命令。但是,对于我的查询,我无法获得正确的语法。请注意 INSERT INTO 完美运行。 只是试图在更新部分工作。任何帮助将不胜感激。查询如下

@$pfw_strQuery = "INSERT INTO  `client`(`client_id`,`email`,`first_name`,`last_name`,`first_time`,`password`)VALUES (\"$client_id\",\"$email\",\"$first_name\",\"$last_name\",\"$first_time\",\"$textfield\") ON DUPLICATE KEY UPDATE `email` = VALUES(\"$email\"),`first_name` = VALUES(\"$first_name\"),`last_name` = VALUES(\"$last_name\"),`first_time` = VALUES (\"$first_time\"),`password` = VALUES (\"$textfield\") ";

【问题讨论】:

标签: php mysql


【解决方案1】:

查看MySQL documentation on ON DUPLICATE KEY UPDATE。如果要在该子句中使用 PHP 变量,请删除 ON DUPLICATE KEY 子句中的 VALUES() 附件。

$pfw_strQuery = "INSERT INTO  `client` (`client_id`,`email`,`first_name`,`last_name`,`first_time`,`password`)
  VALUES ('$client_id','$email','$first_name','$last_name','$first_time','$textfield')
  ON DUPLICATE KEY UPDATE
    `email` = '$email',
    `first_name` = '$first_name',
    `last_name` = '$last_name',
    `first_time` = '$first_time',
    `password` = '$textfield' ";

如果您确实使用了VALUES() 附件,则它是列名,而不是属于其中的输入变量

您可以在 UPDATE 子句中使用 VALUES(col_name) 函数来引用来自 INSERT ... UPDATE 语句的 INSERT 部分的列值

$pfw_strQuery = "INSERT INTO  `client` (`client_id`,`email`,`first_name`,`last_name`,`first_time`,`password`)
  VALUES ('$client_id','$email','$first_name','$last_name','$first_time','$textfield')
  ON DUPLICATE KEY UPDATE
    `email` = VALUES(`email`),
    `first_name` = VALUES(`first_name`),
    `last_name` = VALUES(`last_name`),
    `first_time` = VALUES(`first_time`),
    `password` = VALUES(`textfield`) ";

请注意,我已将所有转义的双引号替换为单引号。虽然 MySQL 支持字符串文字的双引号,但单引号在其他 RDBMS 中更加标准和可移植。

我们假设所有这些变量都已针对 SQL 注入正确转义。最后,您可能知道,旧的mysql_*() 函数计划弃用。建议切换到支持预处理语句和参数化查询的更新 API,如 MySQLi 或 PDO,完全避免转义和引用问题。

【讨论】:

  • @LeoStein 我们假设此表中为client_id
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-29
  • 1970-01-01
  • 2016-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多