2010-01-07 78 views
0

我从来没有遇到过像这样的错误。我在使用准备好的语句时,一直在努力解决问题,包括将表单剥离为裸组件。MySQL查询正在创建重复行

下面的代码在执行时会创建一个重复的行。

$sql = "INSERT INTO inventory 
    VALUES ('','$stocknum','$year','$make','$model','$price','$body','$mile','$engine','$trans', 
    '$drive','$doors','$fuel','$vin','$des','$featured','$sale','$features','$safety','$airbags','$power', 
    '$exterior','$interior','','','','','')"; 
$insert = mysql_query($sql,$connection) or die(mysql_error()); 
$name = mysql_insert_id(); 

我无法围绕为什么它会这样做。

+1

是否有可能提交页面被击中两次?检查Web服务器日志(或使用error_log()或只是发送自己的电子邮件,如果你没有访问日志设施) – BojanG 2010-01-07 19:15:55

+0

我有同样的问题:(任何想法?谢谢 – 2011-07-29 16:51:31

+0

发现我的问题 – 2011-07-29 17:34:49

回答

2

我在使用orm库访问数据库时遇到了同样的问题。也尝试用mysql直接测试

经过将近一天在多个浏览器中测试并获得不同结果后,我发现我使用Chrome浏览器的扩展(Webug)导致页面回忆。禁用扩展后,它的工作

我测试了一些引起这个问题的扩展...在铬:Webug。

希望它可以帮助

+0

我知道这是旧的,但事实证明这是问题。 – RedElement 2014-01-27 02:55:29

1

插入语句可能会被调用两次。您是否添加了日志记录以确保此代码仅运行一次?您是否搜索过以确保没有其他代码可以在其他地方添加库存记录?

+0

这是唯一的代码,而不是在网页上发布的值我认为它可能会循环有些原因我不知道,所以我在最后放置了一个die(),但它仍然是这样。 – RedElement 2010-01-07 18:21:22

+0

这是一个很长的镜头,但是也许有一个触发器在某处做INSERT? – 2010-01-07 18:33:25

+0

我在数据库中添加了一个唯一的列。它仍然试图运行两次。这至少可以防止添加副本。 – RedElement 2010-01-07 18:33:44

0

当您以后查询表时,您是只从该表中选择,还是将其加入到另一个表中?如果在连接表中有多个子记录,则会得到多个结果。

您的代码看起来对我来说是正确的,除非在页面的其余部分我没有看到。

+0

这是现在唯一的桌子。至于代码,我唯一没有包括的是mysql连接的东西。 – RedElement 2010-01-07 18:37:20

1

库存表中有多少列?第二行是第一行的完全重复吗?我不知道PHP的数据库接口,但我可以设想一个错误,如果给它的字段多于列的字段,它会尝试创建多行。

编辑:MySQL文档有点研究发现:

的INSERT语句使用价值 语法可以插入多行。要做 这个,包含多列 值的列表,每列值括在 括号内,并用逗号分隔。 示例:

INSERT INTO tbl_name(a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

括号内的每行值列表必须为 。该 下面的语句是非法的,因为 在列表中值的数目不 不匹配列名的数量:(A,B,C) VALUES 1,2,3,4

INSERT INTO tbl_name(, 5,6,7,8,9);

根据您的变量的内容,以及如何在PHP/MySQL的驱动程序处理这些变量(直接文本substition或?占位符)正在执行的语句可能不会像你期望。在执行之前尝试显示$sql的值。

+0

我已检查确保插入的值的数量与列数相匹配。同样的错误。我认为这与我的虚拟主机有关,因为每个添加SQL数据的脚本都在做同样的事情。 – RedElement 2010-01-10 02:28:39

-1

我想你有一个.htaccess文件正在向同一个脚本发出2个请求的问题。在插入时记录带有时间戳的消息。

+0

...我被拒绝了,因为?很明显,有两个请求,而不是一个请求执行两次sql。我们知道这是因为调试消息打印一次。错误的.htaccess文件可能导致2个请求。这发生在前一天另一个论坛上的某个人。 – rick 2010-01-14 07:43:53

0

在没有对这个我观察任何真正明确的结论之一是,我想红素是在正确的轨道上时,他说:“我认为这是与我的网络主机现在每个添加SQL数据的脚本都在做同样的事情。

我有上面列出的问题,无法看到什么在地球上造成这一点,直到我在不同的平台上运行相同的代码,它工作正常。我最初是在本地主机WAMP配置中进行测试,但是当我将代码提升到真正的服务器时,它没有任何问题。

因此,我建议如果其他人有这个问题,它是值得一试不同的服务器配置。