행을 삽입하면 테이블의 ‘id’필드가 자동으로 증가합니다. 행을 삽입하고 해당 ID를 얻고 싶습니다.
내가 말한대로 할 것이지만 행 삽입과 ID 가져 오기 사이의 시간에 대해 걱정하지 않고 할 수있는 방법이 있습니까?
입력 한 정보와 일치하는 행에 대해 데이터베이스를 쿼리 할 수 있지만 ID가 유일한 차이는 있지만 중복이 많이 발생합니다.
답변
$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 함수 LAST_INSERT_ID()
는 필요한 것을 수행합니다 . 이 세션 중에 삽입 된 ID를 검색합니다 . 따라서 다른 프로세스 (예 : 동일한 스크립트를 호출하는 다른 사람)가 같은 테이블에 값을 삽입하는 경우에도 사용하는 것이 안전합니다.
PHP 함수는 mysql_insert_id()
호출과 같은 작업을 수행 SELECT LAST_INSERT_ID()
하여 mysql_query()
.
답변
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에서 제거되었습니다.