2012-10-15 50 views
1

我使用了php表单向导来更新表单usubmision上的mysql数据库。 PHP表单向导只能执行INSERT INTO,所以我搜索了互联网并找到了DUPLICATE KEY UPDATE命令。但是我无法为我的查询得到正确的语法。请注意INSERT INTO完美地工作。 只是试图在更新部分工作。任何帮助将不胜感激。查询低于插入到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` = VALUES(\"$email\"),`first_name` = VALUES(\"$first_name\"),`last_name` = VALUES(\"$last_name\"),`first_time` = VALUES (\"$first_time\"),`password` = VALUES (\"$textfield\") "; 
+1

请阅读[正确的SQL转义](http://bobby-tables.com/php)。这个例子非常令人担忧。 – tadman

回答

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()罩,它是列名,不是输入变量属于内部。

您可以使用VALUES(COL_NAME)函数UPDATE子句中,以从,我已经取代了INSERT ... UPDATE语句

$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_*()函数计划弃用。建议切换到MySQLi或PDO等更新的API,以支持预准备语句和参数化查询,避免完全逃避和引用问题。

+0

您还必须在表结构中设置唯一索引。 –

+0

@LeoStein我们假设在这个表中是'client_id'。 –

相关问题