SQL REPLACE INTO无法正常工作

时间:2012-04-18 04:06:47

标签: mysql insert replace

所以我有一个表单可以通过其ID(自动递增列(主键))从数据库中获取数据,并通过值属性显示<input>标记中的所有字段。当我提交表单时,如果ID列中的ID不存在则要求它插入一个新行,如果它确实存在,我想要更新具有相同ID的行中的其余数据。

我一直在努力研究这个,但似乎没有人做我想做的事情,它总是略有不同。我找到了一个REPLACE INTO并创建它如下:

$sqlString = 'REPLACE INTO coursework
SET cwID=`'. $cwID .'`,
cwTitle=`'. $cwTitle .'`,
cwContent=`'. $cwContent .'`,
cwProgress=`'. $cwProgress .'`,
cwDue=`'. $cwDue .'`;

所有$ cw []变量都是从$ _POST方法收到的内容。

我在“字段列表”中不断收到错误代码:1054-未知列'6' - “未知列'6'”是mysql尝试调用$ cwID($ _POST ['cwID']的值)而不是cwID列(我的表的主键)。我觉得我有一些简单而愚蠢的东西,但我之前从未使用过这种REPLACE INTO方法。

我看到一篇关于INSERT IGNORE INTOINSERT ... ON DUPLICATE KEY UPDATE的帖子,但这些帖子听起来比我正在寻找的更具破坏性。

我只是想确保如果cwID存在并且保持自动增量,则更新表,或者如果没有ID则添加新行。我应该只运行SELECT查询以查看它是否存在并正确插入/更新?

2 个答案:

答案 0 :(得分:3)

删除用单引号(')替换字符串周围的反向标记(`)。

MySql正在尝试查找由您用作值的字符串命名的列。

请参阅http://dev.mysql.com/doc/refman/5.5/en/identifiers.html

答案 1 :(得分:1)

用单引号替换反引号:

$sqlString = 
 "REPLACE INTO coursework SET cwID='$cwID', cwTitle='$cwTitle', cwContent='$cwContent', cwProgress='$cwProgress', cwDue='$cwDue'";

另请注意,"会插入您的变量。