提问人:Lukas Syn Durjan 提问时间:5/6/2015 最后编辑:Lukas Syn Durjan 更新时间:5/7/2015 访问量:102
PHP、mysql、主键保持两条记录不变
PHP, mysql, primary key remains unchanged for two records
问:
我有以下代码,如上所述,我有两个 INSERT 语句,它们插入了两条记录 - 一条是当前日期,另一条是 -1 天。问题似乎出在mysql_insert_id上。我收到以下错误:
键“PRIMARY”的重复条目“28”
看起来两个语句的 ID 保持不变,并且添加第一个“INSERT”没有任何问题,问题出在尝试将第二条记录添加到同一表中的行。脚本如下:
<?
include("session.php");
include("database_common.php");
if (isset($campaignName) & isset($campaignRedirect)) {
$dataTable = 'qrData_'.$_SESSION['displayName'];
$statTable = 'qrStat_'.$_SESSION['displayName'];
$query = mysql_query("INSERT INTO ".$dataTable." VALUES(".mysql_insert_id($connection).", '".$campaignRedirect."', '".$campaignName."');", $connection);
$statBlank1 = mysql_query("INSERT INTO ".$statTable." VALUES(".mysql_insert_id($connection).", CURDATE() - INTERVAL 1 DAY, 0, '".$campaignName."');", $connection);
$statBlank2 = mysql_query("INSERT INTO ".$statTable." VALUES(".mysql_insert_id($connection).", CURDATE(), 0, '".$campaignName."');", $connection);
if ($statBlank1) echo "stat 1 ok";
else echo mysql_error($connection);
if ($statBlank2) echo "stat 1 ok";
else echo mysql_error($connection);
if ($query) die("<center>Kampaň úspešne vytvorená<br><br><button onclick='parent.jQuery.fancybox.close();' name='submit' class='btn btn-primary'>Zatvoriť</button></center>");
else die("<center>Vyskytla sa chyba. Prosím, zopakujte Vašu požiadavku.</center>");
}
?>
下面是一个表结构:
`id` int(11) NOT NULL AUTO_INCREMENT,
`date` date DEFAULT NULL, `usageCount` int(11) DEFAULT NULL,
`campaign` varchar(45) DEFAULT NULL, PRIMARY KEY (`id`)
有什么建议吗?
答:
-1赞
lakshman
5/6/2015
#1
从 中删除参数。即只有要写的。.& 回显要插入的查询。.您将获得正在插入的值。在每次插入查询后使用 mysqli_free_resultmysqli_insert_id
mysqli_insert_id
评论
0赞
Jay Blanchard
5/6/2015
看看问题下的评论 - 这不是问题。
0赞
lakshman
5/6/2015
是的,但由于上述活动,ID 保持不变。如果仅使用mysql_insert_id将为每个插入的查询生成新值。
0赞
Jay Blanchard
5/6/2015
问题远不止于此。OP 正在混合 API,这将不起作用。
0赞
Lukas Syn Durjan
5/6/2015
尝试过,结果保持不变。添加第一条记录,第二条记录获取重复的 ID。
1赞
Jay Blanchard
5/6/2015
他应该,但他不是。
0赞
Lukas Syn Durjan
5/6/2015
#2
好吧,伙计们,我让它有点阿米什,但它有效。我直接从 mysql 获取最后一个 id,并在下一条记录中将其增加 1,如下所示:
$statBlank1 = mysql_query("INSERT INTO ".$statTable." VALUES(ID, CURDATE() - INTERVAL 1 DAY, 0, '".$campaignName."');");
$statBlank2 = mysql_query("INSERT INTO ".$statTable." VALUES(LAST_INSERT_ID() + 1, CURDATE(), 0, '".$campaignName."');", $connection);
第一个查询中的 ID 未定义,但表结构始终将 NULL 值更改为 NOT NULL,在本例中,这将是下一个递增值。希望有人会觉得这对您有所帮助。
评论
mysql_*
mysqli_*
mysqli_report
mysqli_
mysql_
qrStat_#
campaignName