我的WordPress插件有一个表格,其中包含一个名为ID的 AUTO_INCREMENT 主键字段。当一个新行插入表中时,我想获得插入的ID值。
该功能是使用AJAX将数据发布到服务器以插入到数据库中。在AJAX响应中返回新的行ID以更新客户端状态。多个客户端可能同时向服务器发布数据。因此,我必须确保每个AJAX请求都得到了正确的新行ID作为响应。
在PHP中,此功能有一个名为 mysql_insert_id 的方法。但是,仅当参数为 link_identifier时,它才适用于竞争条件 上次操作。我对数据库的操作是在$ wpdb上。如何从$ wpdb中提取 link_identifier 以确保mysql_insert_id有效?有没有其他方法可以从$ wpdb获取最后插入的行ID?
感谢。
答案 0 :(得分:162)
在执行插入的$wpdb->insert()
之后直接执行此操作:
$lastid = $wpdb->insert_id;
有关如何使用WordPress方式的更多信息可以在WordPress codex中找到。上述详细信息可在wpdb class page
上找到答案 1 :(得分:13)
我就是这样做的,在我的代码中
...
global $wpdb;
$query = "INSERT INTO... VALUES(...)" ;
$wpdb->query(
$wpdb->prepare($query)
);
return $wpdb->insert_id;
...
答案 2 :(得分:0)
这样的事也应该这样做:
$last = $wpdb->get_row("SHOW TABLE STATUS LIKE 'table_name'");
$lastid = $last->Auto_increment;
答案 3 :(得分:0)
插入后,我需要获取最后的id方式,所以
$lastid = $wpdb->insert_id;
这不是一个选择。
执行以下操作:
global $wpdb;
$id = $wpdb->get_var( 'SELECT id FROM ' . $wpdb->prefix . 'table' . ' ORDER BY id DESC LIMIT 1');
答案 4 :(得分: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 排序,并仅显示第一行
答案 5 :(得分:-4)
在事务中调用mysql_insert_id()
,应该这样做:
mysql_query('BEGIN');
// Whatever code that does the insert here.
$id = mysql_insert_id();
mysql_query('COMMIT');
// Stuff with $id.