새 데이터가 자주 삽입되는 테이블이 있습니다. 테이블의 마지막 ID를 가져와야합니다. 어떻게 할 수 있습니까?
유사 SELECT MAX(id) FROM table
합니까?
INSERT
및 쿼리 MAX(id)
, 당신이 아니라 id를 얻을 수 있습니다 당신의 마지막 ID를.
새 데이터가 자주 삽입되는 테이블이 있습니다. 테이블의 마지막 ID를 가져와야합니다. 어떻게 할 수 있습니까?
유사 SELECT MAX(id) FROM table
합니까?
INSERT
및 쿼리 MAX(id)
, 당신이 아니라 id를 얻을 수 있습니다 당신의 마지막 ID를.
답변:
PDO를 사용하는 경우 PDO::lastInsertId
.
Mysqli를 사용하는 경우 mysqli::$insert_id
.
여전히 Mysql을 사용하는 경우 :
mysql_*
새 코드에서 함수를 사용하지 마십시오 . 더 이상 유지 되지 않으며 공식적으로 사용되지 않습니다 . 참고 항목 빨간색 상자 ? 에 대해 알아 준비된 문 대신 사용할 PDO 또는 MySQLi를 - 이 기사는 당신이 어떤을 결정하는 데 도움이됩니다. PDO를 선택한 경우 여기에 좋은 자습서가 있습니다.
그러나 필요한 경우 mysql_insert_id
.
mysql_insert_id
후 바로 당신 mysql_query
. 물론 그 사이에 동일한 연결에 대해 다른 쿼리를 여러 개 실행하는 경우 도움이 될 수있는 것은 없습니다.
현재 연결에 삽입 된 마지막 ID가 무엇인지 아는 기능이 있습니다.
mysql_query('INSERT INTO FOO(a) VALUES(\'b\')');
$id = mysql_insert_id();
플러스 사용하여 최대 것은 A는 나쁜 아이디어 가 발생할 수 있기 때문에 문제 두 개의 다른 세션에서 코드를 동시에 사용하면 입니다.
이 함수를 mysql_insert_id 라고합니다.
와 PDO :
$pdo->lastInsertId();
와 Mysqli :
$mysqli->insert_id;
mysql_*
새 코드에서 함수를 사용하지 마십시오 . 더 이상 유지 되지 않으며 공식적으로 사용되지 않습니다 . 참고 항목 빨간색 상자 ? 에 대해 알아 준비된 문 대신 사용할 PDO 또는 MySQLi를 - 이 기사는 당신이 어떤을 결정하는 데 도움이됩니다. PDO를 선택한 경우 여기에 좋은 자습서가 있습니다.
당신이 쓴 내용은 id
그들이 독특하고 자동으로 증가한다고 가정 하면 가장 큰 결과를 얻을 수 있으며 동시성 문제를 초대해도 괜찮을 것입니다.
MySQL을 데이터베이스로 사용하고 있기 때문에 LAST_INSERT_ID()
삽입을 수행 한 현재 연결에서만 작동 하는 특정 기능 이 있습니다.
PHP는 mysql_insert_id
.
내장 된 PHP 기능으로 최근 삽입 된 ID를 얻을 수 있습니다. mysql_insert_id();
$id = mysql_insert_id();
당신은 또한 최신 ID를 얻을
$id = last_insert_id();
참고 : 하나의 문으로 여러 삽입을 수행하면 mysqli :: insert_id가 올바르지 않습니다.
탁자:
create table xyz (id int(11) auto_increment, name varchar(255), primary key(id));
이제 다음을 수행하십시오.
insert into xyz (name) values('one'),('two'),('three');
mysqli :: insert_id는 3이 아닌 1이됩니다.
올바른 값을 얻으려면 다음을 수행하십시오.
mysqli::insert_id + mysqli::affected_rows) - 1
이것은 문서이지만 약간 모호합니다.
원하는 테이블의 마지막 auto_increment ID를 얻기 위해 순수한 MySQL 구문을 사용하는 것을 선호합니다.
php mysql_insert_id () 및 mysql last_insert_id ()는 마지막 트랜잭션 ID 만 제공합니다.
스키마에있는 테이블의 마지막 auto_incremented ID (마지막 트랜잭션 1뿐만 아니라)를 원하는 경우이 쿼리를 사용할 수 있습니다.
SELECT AUTO_INCREMENT FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'my_database'
AND TABLE_NAME = 'my_table_name';
그게 다야.
예를 들어 답을 보지 못하는 것이 슬프다.
사용 Mysqli을 :: $ INSERT_ID를 :
$sql="INSERT INTO table (col1, col2, col3) VALUES (val1, val2, val3)";
$mysqli->query($sql);
$last_inserted_id=$mysqli->insert_id; // returns last ID
사용 PDO를 :: lastInsertId를 :
$sql="INSERT INTO table (col1, col2, col3) VALUES (val1, val2, val3)";
$database->query($sql);
$last_inserted_id=$database->lastInsertId(); // returns last ID
MySQLi
트랜잭션을 사용하면 mysqli::$insert_id
0을 반환했기 때문에 때때로를 가져올 수 없었습니다. 특히 저장 프로 시저를 사용하는 경우 INSERT
s 를 실행 합니다. 따라서 거래에는 다른 방법이 있습니다.
<?php
function getInsertId(mysqli &$instance, $enforceQuery = false){
if(!$enforceQuery)return $instance->insert_id;
$result = $instance->query('SELECT LAST_INSERT_ID();');
if($instance->errno)return false;
list($buffer) = $result->fetch_row();
$result->free();
unset($result);
return $buffer;
}
?>
사용 mysqli 로 MySQL은 depricating입니다
<?php
$mysqli = new mysqli("localhost", "yourUsername", "yourPassword", "yourDB");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
// Conside employee table with id,name,designation
$query = "INSERT INTO myCity VALUES (NULL, 'Ram', 'Developer')";
$mysqli->query($query);
printf ("New Record has id %d.\n", $mysqli->insert_id);
/* close connection */
$mysqli->close();
?>
나는 시도했다
mysqli_insert_id ($ dbConnectionObj)
이것은 현재 연결의 마지막으로 삽입 된 ID를 반환하므로 연결을 제대로 관리하고 있다면 이것이 작동합니다. 적어도 나를 위해 일했습니다.
이 모든 논의에서 나는 max id를 확인하는 이유가 다음이 무엇인지 아는 것이라고 가정합니다. (내 최대 id가 5이면 다음은 5 + 1 = 6이됩니다).
>>이게 이유가 아니라면 사과드립니다.
다른 사람이 귀하의 CHECK와 INSERT 사이에 정보를 INSERT하면 잘못된 ID를 제공하는 경우.
따라서 타임 스탬프 또는 기타 고유 한 값을 포함 할 수있는 해시를 만들면 해결할 수 있습니다.
그런 다음 동일한 함수에서 빈 값과 해시로 정보를 삽입 할 수 있습니다. AUTO_INCRECEMENT를 선택한 경우 ID가 생성됩니다.
그런 다음 동일한 기능에서 여전히 해시를 보유하고 동일한 해시로 ID를 찾을 수 있습니다. 그런 다음 mysql UPDATE로 빈 값 채우기를 완료 할 수 있습니다.
여기에는 더 많은 연결이 포함되지만 여전히이를 수행하는 방법입니다 ...
행운을 빕니다.
테이블에 UserID, Emp_ID, ..과 같은 AUTO INCREMENT 열이있는 경우이 쿼리를 사용하여 마지막으로 삽입 된 레코드를 가져올 수 있습니다. SELECT * FROM table_name where UserID = (select MAX (UserID) from table_name) PHP 코드에서 :
$con = mysqli_connect('localhost', 'userid', 'password', 'database_name');
if (!$con) {
die('Could not connect: ' . mysqli_error($con));
}
$sql = "SELECT * FROM table_name where UserID=(select MAX(UserID)from table_name)";
$result = mysqli_query($con, $sql);
그런 다음 가져온 데이터를 요구 사항으로 사용할 수 있습니다.
mysql_query("INSERT INTO mytable (product) values ('kossu')");
printf("Last inserted record has id %d\n", ***mysql_insert_id()***);