1

ご覧のとおり、次のコードがあります。2 つの INSERT ステートメントがあり、2 つのレコードが挿入されます。1 つは現在の日付、もう 1 つは -1 日です。問題は mysql_insert_id にあるようです。次のエラーが表示されます。

キー「PRIMARY」のエントリ「28」が重複しています

ID は両方のステートメントで同じままで、最初の「INSERT」も問題なく追加されているように見えます。問題は、2 番目のレコードを同じテーブルに追加しようとしている行にあります。スクリプトは次のとおりです。

<?
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`)

助言がありますか?

4

2 に答える 2

0

わかりました、私はそれを少しアーミッシュにしましたが、うまくいきます。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 に変更します。この場合、次のインクリメントされた値になります。誰かがこれが役立つことを願っています。

于 2015-05-06T15:59:51.543 に答える