PHP脚本在执行代码时INSERT INTO数据库两次

时间:2011-05-20 18:41:34

标签: php mysql

我在脚本中使用了一个非常简单的PHP插入,并且每次执行时它都会使条目加倍。

(为了确保我没有执行两次脚本,我使用mail()函数在执行时给我发电子邮件,我只收到一封电子邮件)

$hostname = "localhost";
$pass = "password";
$muser    = "username";
$dbconn = mysql_connect($hostname, $muser, $pass);
$db ="database";
mysql_select_db($db);
$query = "INSERT INTO tablename (field1, field2) VALUES ('happy', 'birthday')";
mysql_query($query);

3 个答案:

答案 0 :(得分:3)

至少有三种方法可以实现:

  1. 您发布的代码包含在一个被调用两次的函数中。
  2. 重新加载您的页面,执行两次调用。
  3. 另一个进程(cron作业,备份实用程序)正在复制数据。
  4. 由于您说您只收到一封电子邮件,我们可能会排除#2(除非您的电子邮件服务器有速率限制器,并且只发送两条消息中的一条)。

    我们可以出于同样的原因排除#1,除非mail()调用不包含在与mysql_query()调用相同的函数中。

    因此我们不得不寻找另一个复制数据的过程。您发布的代码不足以做出此决定。

答案 1 :(得分:0)

是否有可能在该表中附加写得不好的触发器?如果从mysql控制台或mysqladmin执行该脚本该怎么办?

答案 2 :(得分:0)

这可能是一个远景,但如果您从浏览器调用脚本并在脚本生成的页面上有一个<img>标记,其中包含空src属性,那么浏览器将为此假设将相同的URL与脚本的URL相同,并将额外的时间调用您的脚本。

我认为任何其他加载外部资源的html标记都是如此。

事实上,你只收到一封电子邮件就会反对这种情况,但如果我是你,我还是会检查出来。