2012-04-18 65 views
0

因此,我有一个表单可以通过ID(自动递增列(主键))从数据库获取数据,并通过值属性显示<input>标记中的所有字段。当我提交表单时,我希望它可以插入一个新行,如果ID列中的ID尚不存在,并且它是否需要更新具有相同ID的行中的其余数据。SQL REPLACE INTO无法正常工作

我一直在试图研究这个,但似乎没有人做同样的事情,我试图做,它总是略有不同。我找到了REPLACE INTO并将其创建为如下形式:

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

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

我不断收到一个错误代码:在“字段列表” 1054-未知列“6” - “未知列‘6’”是MySQL的尝试调用$ _ POST ['CWID $ CWID(价值'])而不是cwID列(这是我的表的主键)。我觉得我缺少一些简单而愚蠢的东西,但我从来没有使用过这种REPLACE INTO方法。

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

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

回答

1

单引号替换反引号:

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

另外,注意"将插值的变量。

+0

它是!我知道这是愚蠢的...非常感谢! – jbingman 2012-04-18 04:26:17

3

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

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

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

+0

我试过了,但它更加混乱了查询。 '错误代码:1064-你的SQL语法有错误;请查看与您的MySQL服务器版本相对应的手册,以便在“Android 02”附近使用正确的语法,cwContent = 阅读并学习第3行\“学习Android”中的第5-6章 – jbingman 2012-04-18 04:12:56

+0

@jbingman尝试转义发布数据通过'mysql_real_escape_string'。如果这没有帮助记录sql语句并发布它。back-ticks不会帮助。 – 2012-04-18 04:14:35