0

mysqli_insert_id()で返されるIDが予想されるIDと異なる理由がわかりません。これが私のコードです:

$query = "INSERT INTO payments_table (payment_type, payment_number, payment_cost, insertion_date) VALUES ( '$paymentType', '$paymentNumber', '$totalCost', NOW())";
$data = mysqli_query($dbc, $query);
$currentPayerID = mysqli_insert_id($dbc);

//DEBUG
echo 'current payerID is: ' . $currentPayerID;

現在2行あるので、次の実行後に「現在のpayerIDは3です」とエコーすることを期待しています。ただし、このコードを実行すると、「現在のpayerIDは21です」とエコーされます。

いくつかのメモ:

  1. この「payments_table」テーブルには、主キーである「payer_id」という名前の列があり、AUTO_INCREMENT属性があります。
  2. 私はこのテーブルを「切り捨て」ました(これはテーブルを空にすることと同じだと思います)。

私はstackoverflow全体を検索しましたが、答えの中には、私が見つけたことが可能であると信じていないものもあります。寛大な助けに感謝します!

4

3 に答える 3

1

あなたが期待していることは間違っています。

自動インクリメントを使用するフィールドを使用すると、データを挿入し、挿入ごとに 1 ずつインクリメントして一意の主キーを生成できます。

これが意味することは、返される は一意に作成された UD であり、テーブルに挿入された行の数ではないということです。

于 2013-02-11T06:41:30.050 に答える
0

このmysqli_insert_id関数は、属性IDを持つ列を持つテーブルのクエリによって生成された を返します。AUTO_INCREMENT最後のクエリがINSERTorステートメントではない場合、または変更されたテーブルに属性UPDATEを持つ列がない場合、この関数はゼロを返します。AUTO_INCREMENT

切り捨てがあり、最後のIDが20だったのに21になっている可能性があります。一度試してみてください。

于 2013-02-11T06:13:48.077 に答える
0

mysqli_insert_id最後の AUTO_INCREMENT値を返します -呼び出すpayments_tableに別のテーブルに挿入している場合、予期しない値を取得している可能性があります。mysqli_insert_id

また、AUTO_INCREMENT列はデータベース テーブルの行数に対応するのではなく、テーブルの存続期間中の行の総数に対応します。より正確には、MySQL は、新しい行が作成されるたびにインクリメントされるカウンター変数を維持します。

次のクエリは、テーブルの次の期待AUTO_INCREMENT値を示します。

SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'my_database_name' AND TABLE_NAME = 'my_table_name';
于 2013-02-11T07:16:20.603 に答える