답변:
$link = mysqli_connect('127.0.0.1', 'my_user', 'my_pass', 'my_db');
mysqli_query($link, "INSERT INTO mytable (1, 2, 3, 'blah')");
$id = mysqli_insert_id($link);
참조하십시오 mysqli_insert_id()
.
무엇을하든 삽입 한 다음 " SELECT MAX(id) FROM mytable
" 를 수행하지 마십시오 . 당신이 말했듯이, 그것은 경쟁 조건이며 필요가 없습니다. mysqli_insert_id()
이미이 기능이 있습니다.
mysql_insert_id() will convert the return type of the native MySQL C API function mysql_insert_id() to a type of long (named int in PHP). If your AUTO_INCREMENT column has a column type of BIGINT (64 bits) the conversion may result in an incorrect value. Instead, use the internal MySQL SQL function LAST_INSERT_ID() in an SQL query. For more information about PHP's maximum integer values, please see the integer documentation.
\
MySQL 함수 LAST_INSERT_ID()
는 필요한 것을 수행합니다 . 이 세션 중에 삽입 된 ID를 검색합니다 . 따라서 다른 프로세스 (예 : 동일한 스크립트를 호출하는 다른 사람)가 같은 테이블에 값을 삽입하는 경우에도 사용하는 것이 안전합니다.
PHP 함수는 mysql_insert_id()
호출과 같은 작업을 수행 SELECT LAST_INSERT_ID()
하여 mysql_query()
.
echo mysql_insert_id(); mysql_query('SELECT LAST_INSERT_ID(600)'); echo mysql_insert_id(); mysql_query('SELECT LAST_INSERT_ID()');
두 번째 mysql_insert_id()
는 600을 반영하지 않습니다 mysql_query('SELECT LAST_INSERT_ID()')
. mysql_insert_id()
변경 사항을 반영 하려면 먼저 삽입 또는 업데이트 (0 개의 행에 영향을 줄 수 있음)를 수행해야합니다. http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id
PHP 웹 사이트에서 mysql_insert_id는 더 이상 사용되지 않으며 PDO를 사용해야합니다. PDO로이를 수행하려면 다음과 같이 진행하십시오.
$db = new PDO('mysql:dbname=database;host=localhost', 'user', 'pass');
$statement = $db->prepare('INSERT INTO people(name, city) VALUES(:name, :city)');
$statement->execute( array(':name' => 'Bob', ':city' => 'Montreal') );
echo $db->lastInsertId();
@NaturalBornCamper가 말했듯이 mysql_insert_id는 더 이상 사용되지 않으며 사용 해서는 안됩니다 . 옵션은 이제 PDO 또는 mysqli를 사용합니다. NaturalBornCamper는 자신의 답변으로 PDO를 설명 했으므로 mysqli_insert_id를 사용하여 MySQLi ( MySQL Enhanced )로 PDO를 수행하는 방법을 보여 드리겠습니다 .
// First, connect to your database with the usual info...
$db = new mysqli($hostname, $username, $password, $databaseName);
// Let's assume we have a table called 'people' which has a column
// called 'people_id' which is the PK and is auto-incremented...
$db->query("INSERT INTO people (people_name) VALUES ('Mr. X')");
// We've now entered in a new row, which has automatically been
// given a new people_id. We can get it simply with:
$lastInsertedPeopleId = $db->insert_id;
// OR
$lastInsertedPeopleId = mysqli_insert_id($db);
더 많은 예제는 PHP 문서를 확인하십시오 : http://php.net/manual/en/mysqli.insert-id.php
나는 단지 작은 세부 사항을 추가하고 싶습니다 lastInsertId()
;
한 번에 둘 이상의 행을 입력하면 마지막 Id를 반환하지 않고 마지막 삽입 컬렉션의 첫 번째 ID를 반환 합니다.
다음 예제를 고려하십시오
$sql = 'INSERT INTO my_table (varNumb,userid) VALUES
(1, :userid),
(2, :userid)';
$sql->addNewNames = $db->prepare($sql);
addNewNames->execute(array(':userid' => $userid));
echo $db->lastInsertId();
여기서 일어나는 일은 my_table
두 개의 새로운 행을 밀어 넣는 것입니다 . 테이블의 ID는 자동 증분입니다. 동일한 사용자에 대해 다른 두 개의 행을 추가 varNumb
합니다.
끝에서 반향 된 값은 행의 id와 같습니다. 여기서 varNumb=1
, 마지막 행의 id가 아니라 마지막 요청에 추가 된 첫 번째 행의 id를 의미합니다.
예입니다.
$query_new = "INSERT INTO students(courseid, coursename) VALUES ('', ?)";
$query_new = $databaseConnection->prepare($query_new);
$query_new->bind_param('s', $_POST['coursename']);
$query_new->execute();
$course_id = $query_new->insert_id;
$query_new->close();
코드 줄 $course_id = $query_new->insert_id;
에 마지막으로 삽입 된 행의 ID가 표시됩니다. 도움이 되었기를 바랍니다.
다음과 같이 해보십시오. 답을 얻을 수 있습니다.
<?php
$con=mysqli_connect("localhost","root","","new");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
mysqli_query($con,"INSERT INTO new values('nameuser','2015-09-12')");
// Print auto-generated id
echo "New record has id: " . mysqli_insert_id($con);
mysqli_close($con);
?>
다음 링크를 살펴보십시오.
http://www.w3schools.com/php/func_mysqli_insert_id.asp
http://php.net/manual/en/function.mysql-insert-id.php
또한이 확장은 PHP 5.5에서 더 이상 사용되지 않으며 PHP 7.0에서 제거되었습니다.
위 링크 http://php.net/manual/en/function.mysql-insert-id.php 에서 답을 찾았습니다.
정답은:
mysql_query("INSERT INTO tablename (columnname) values ('$value')");
echo $Id=mysql_insert_id();
mysql
대답은 절대 사용하지 마십시오.
이것을 시도하십시오 ... 그것은 나를 위해 일했습니다!
$sql = "INSERT INTO tablename (row_name) VALUES('$row_value')";
if (mysqli_query($conn, $sql)) {
$last_id = mysqli_insert_id($conn);
$msg1 = "New record created successfully. Last inserted ID is: " . $last_id;
} else {
$msg_error = "Error: " . $sql . "<br>" . mysqli_error($conn);
}
또 다른 가능한 대답은 다음과 같습니다.
열과 데이터가 포함 된 테이블을 정의 할 때 열 ID는 AUTO_INCREMENT 특성을 가질 수 있습니다 .
이 방법으로, 당신은 걱정하지 않아도 ID , 그것은 자동으로 만들어 질 것이다 .
예를 들어 ( w3schools 에서 가져온 )
CREATE TABLE Persons
(
ID int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (ID)
)
이것이 누군가에게 도움이되기를 바랍니다.
편집 : 이것은 자동 ID 생성 방법을 정의하고 생성 한 후에 얻는 방법입니다. 이전의 이전 답변이 옳습니다.