插入到DUPLICATE KEY更新错误

时间:2012-10-15 13:36:13

标签: php mysql

我使用php表单向导来更新表单usubmision上的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\") ";

1 个答案:

答案 0 :(得分:1)

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

$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,它支持预处理语句和参数化查询,完全避免转义和引用问题。