1

我使用 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\") ";
4

1 回答 1

1

查看有关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,完全避免转义和引用问题。

于 2012-10-15T13:39:59.260 回答