Nat*_* F. 12 php mysql sql duplicates sql-insert
我有一个问题,并希望有人可以帮助我.
我的问题是每当我在"MainFile"中运行代码时,它会输出它添加了条目的两个ID,但是当我查看我的数据库时,我有六个条目而不是两个...有人可以告诉我为什么它可能会这样做?
注意:我只提供了类中代码的片段,因为提供完整的类将是太多的代码.这是唯一可以执行的代码.
编辑史上的代码
编辑:我已经在这篇文章的底部添加了一个调试日志,验证我只为每个查询执行一次SQL代码.
编辑:我不再使用序列化方法,因为存储此类数据显然不是一个好主意.但是,即使我的新代码将每个单独的值存储在数据库中,我仍然会得到三个条目而不是一个条目.所以,这是同一个问题.什么?
编辑:经过几天的调试后,我已将其缩小到导致问题的这一行
Throwlite::$systemSQL->executeSql("INSERT into ".SQL_COMMENTTHREADS_TABLE." (id, sort_order) values (DEFAULT, '2')");
Run Code Online (Sandbox Code Playgroud)
您可以在此处查看LiteSQL类以供参考:http://pastebin.com/a4C6fF4u
另外,作为参考,以下是用于创建表的代码:
"CREATE TABLE IF NOT EXISTS `" . SQL_COMMENTTHREADS_TABLE . "` (`id` int unsigned NOT NULL AUTO_INCREMENT, `sort_order` int NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;"
Run Code Online (Sandbox Code Playgroud)
而且,即使我非常确定它应该没关系,这里是定义SQL_COMMENTTHREADS_TABLE的地方.
define( 'SQL_COMMENTTHREADS_TABLE', "tl_comment_threads");
Run Code Online (Sandbox Code Playgroud)
何时更新UPDATE tl_comments SET thread=? WHERE id = ?
和第二次?不会被替换为有效的现有 ID,而是保持为空,数据库找不到要更新的条目,而是插入新行。因此,创建另一个条目会导致您每次查询时生成 2 行,而不是仅生成 1 行。
这意味着该GetLastInsertID()
功能无法正常工作。这可能是由一些原因引起的,但 stackoverflow 上已经有很多关于这个问题的有用提示。