我使用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\") ";
答案 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,它支持预处理语句和参数化查询,完全避免转义和引用问题。