【问题标题】:PHP, mysql, primary key remains unchanged for two recordsPHP、mysql、两条记录的主键不变
【发布时间】:2015-07-16 13:19:28
【问题描述】:

我有以下代码,如图所示,我有两个 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`)

有什么建议吗?

【问题讨论】:

  • 您正在混合使用 mysql_*mysqli_* 函数。那是行不通的。
  • 首先,mysqli_report 用于mysqli_ 而不是mysql_ 函数。
  • qrStat_# 的主键是什么 - 包括campaignName 吗?
  • 从 mysql_insert_id 中删除参数..即只写mysql_insert_id..
  • @amdixon - “id”是 AI PK INT NOT NULL。

标签: php mysql insert-id


【解决方案1】:

好吧,伙计们,我写的有点阿米什,但它确实有效。我直接从 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,在这种情况下,这将是下一个递增值。希望有人会觉得这很有帮助。

【讨论】:

    【解决方案2】:

    mysqli_insert_id..即移除参数只写mysqli_insert_id.. & 回显要插入的查询..您将获得插入的值..在每次插入查询后使用 mysqli_free_result

    【讨论】:

    • 看问题下的cmets——这不是问题。
    • 是的,但由于上述活动,id 保持不变。如果只使用 mysql_insert_id,将为每个插入的查询生成新值。
    • 还有更多的问题。 OP 正在混合 API,这是行不通的。
    • 试过了,结果还是一样。添加第一条记录,第二条记录重复 id。
    • 他应该,但他不是。
    猜你喜欢
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 2015-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-02
    相关资源
    最近更新 更多