내 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를 얻는 다른 방법이 있습니까?
감사.
답변
$wpdb->insert()
삽입이 끝나면 바로 다음 과 같이하십시오.
$lastid = $wpdb->insert_id;
WordPress 방식으로 작업하는 방법에 대한 자세한 내용은 WordPress 코덱에서 찾을 수 있습니다. 위의 세부 정보는 wpdb 클래스 페이지 에서 찾을 수 있습니다.
답변
이것이 내 코드에서 내가 한 방법입니다.
...
global $wpdb;
$query = "INSERT INTO... VALUES(...)" ;
$wpdb->query(
$wpdb->prepare($query)
);
return $wpdb->insert_id;
...
답변
이와 같은 일도해야합니다.
$last = $wpdb->get_row("SHOW TABLE STATUS LIKE 'table_name'");
$lastid = $last->Auto_increment;
답변
삽입 후 마지막 아이디를 얻어야해서
$lastid = $wpdb->insert_id;
옵션이 아니 었습니다.
다음을 수행 했습니까?
global $wpdb;
$id = $wpdb->get_var( 'SELECT id FROM ' . $wpdb->prefix . 'table' . ' ORDER BY id DESC LIMIT 1');
답변
mysql_insert_id()
트랜잭션 내부에 호출을 넣어야합니다.
mysql_query('BEGIN');
// Whatever code that does the insert here.
$id = mysql_insert_id();
mysql_query('COMMIT');
// Stuff with $id.