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有什么关系?这是什么意思?
答案 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。添加退出使脚本只写一次。