插入一次,但在MySQL中创建了两条记录

时间:2009-09-14 00:24:42

标签: php sql mysql

for($i = 1 ; $i <= 3; $i++)
{
    if(!empty($_POST['fl' . $i]))
    {
        $dml = "insert into flAptitude(accountId,language,qualification,certificate) value($accountId,'" . $_POST['fl' . $i] . "','" . $_POST['qualification' . $i] . "','" . $_POST['certificate' . $i] . "')";
        mysql_query($dml,$con);
        file_put_contents("fl$i.txt",$dml);
    }
}

并且只创建了fl1.txt,其内容为:

insert into flAptitude(accountId,language,qualification,certificate) value(1,'Germany','Excellent',NULL)

那么,在什么条件下MySQL会为1“insert”语句生成2条记录?

修改 这是表定义:

mysql> show create table flAptitude\G
*************************** 1. row ***************************
       Table: flAptitude
Create Table: CREATE TABLE `flaptitude` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `accountId` int(10) unsigned default NULL,
  `language` varchar(15) NOT NULL,
  `qualification` int(10) unsigned default NULL,
  `certificate` varchar(20) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

它与AUTO_INCREMENT = 3有什么关系?这是什么意思?

5 个答案:

答案 0 :(得分:3)

Occam的Razor告诉我,你可能已经用外环循环了两次这个东西。如果表格上的格式错误的触发器正在复制结果,也可能发生这种情况。除此之外,我们需要查看此代码运行之前和之后的select * from flAptitude是什么,以便更好地了解它正在做什么。

AUTO_INCREMENT=3只是意味着自动增量列从3开始而不是默认值1.

此外,您正在使用InnoDB,它是一个ACID数据库引擎。这意味着您在代码中调用了两次插入,只需找出位置。

答案 1 :(得分:2)

这是一个php问题,不是MySQL的问题。问题是file_put_contents()会覆盖文件的内容。因此,当您的循环发生时(循环两次),您的日志只会插入 last 记录。

试试这个:

$file = "fl{$i}.txt";
$current = file_get_contents($file);
$current .= $dml . "\n";
file_put_contents($file, $current);

有关file_put_contents() here的更多信息。

答案 2 :(得分:1)

要回答问题的最后部分,不要与AUTO_INCREMENT无关,这是attribute to auto-id new rows,在这种情况下从3开始

答案 3 :(得分:1)

你在2009年写了你的问题,但也许我的答案对其他人有用......

我有同样的问题。就我而言,它是FirePHP。 chrome / firefox的附加组件。它(我不知道为什么)加倍我的脚本。当我在没有扩展名的午餐浏览器时,一切都很好。

答案 4 :(得分:0)

我发现这个问题要通过在我的标题声明之后添加exit();来解决;

  $sql = "INSERT INTO airline SET
            company         = '$company',
            name            = '$name',
            address1        = '$address1',
            address2        = '$address2',
            city            = '$city',
            st              = '$st',
            zip             = '$zip',
            ph1             = '$ph1',
            ph2             = '$ph2',
            fax             = '$fax',
            email           = '$email',
            web             = '$web',
            date            = '$date'";

  if (!mysql_query($sql)) {
    mysql_close();
    die("<p><b>Record Not Added </b><br />" . mysql_error() . "</p>");
  }
  else {
    mysql_close();
    $goto = "Location: $php_self";
    header($goto);
    exit();
  }

当我省略exit();时,代码会添加2条完全相同数据的记录,但会增加ID。添加退出使脚本只写一次。