115

私のWordPressプラグインには、IDと呼ばれるAUTO_INCREMENT主キーフィールドを持つテーブルがあります。テーブルに新しい行が挿入されたら、挿入のID値を取得したいと思います。

この機能は、AJAXを使用してデータをサーバーに送信し、DBに挿入することです。新しい行IDは、クライアントのステータスを更新するためにAJAX応答で返されます。複数のクライアントが同時にサーバーにデータを投稿している可能性があります。したがって、各AJAXリクエストが応答として正確な新しい行IDを取得することを確認する必要があります。

PHPには、この機能のためにmysql_insert_idというメソッドがありますが、引数が最後の操作のlink_identifierである場合にのみ、競合状態に対して有効です。私のデータベースでの操作は$wpdbです。$ wpdbからlink_identifierを抽出して、mysql_insert_idが機能することを確認するにはどうすればよいですか?$ wpdbから最後に挿入された行のIDを取得する他の方法はありますか?

ありがとう。

4

7 に答える 7

229

$wpdb->insert()挿入を行う の 直後に、次のようにします。

$lastid = $wpdb->insert_id;

WordPress の方法で物事を行う方法の詳細については、WordPress コーデックスを参照してください。上記の詳細は、wpdb クラス ページに記載されています。

于 2009-10-16T02:04:00.353 に答える
15

これが私のコードでのやり方です

 ...
 global $wpdb;
 $query =  "INSERT INTO... VALUES(...)" ;
 $wpdb->query(
        $wpdb->prepare($query)
);
return $wpdb->insert_id;
...

その他のクラス変数

于 2014-02-11T17:53:43.000 に答える
0

このようなものもそれを行う必要があります:

$last = $wpdb->get_row("SHOW TABLE STATUS LIKE 'table_name'");
$lastid = $last->Auto_increment;
于 2011-10-11T12:06:56.270 に答える
0

ちょうどこのような :

global $wpdb;
$table_name='lorem_ipsum';
$results = $wpdb->get_results("SELECT * FROM $table_name ORDER BY ID DESC LIMIT 1");
print_r($results[0]->id);

すべての行を選択し、それらを id で DESC 並べ替え、最初の行のみを表示するだけです

于 2021-01-23T16:01:56.490 に答える
-7

mysql_insert_id()トランザクション内に呼び出しを置くと、それを行う必要があります:

mysql_query('BEGIN');
// Whatever code that does the insert here.
$id = mysql_insert_id();
mysql_query('COMMIT');
// Stuff with $id.
于 2009-10-16T01:32:23.160 に答える