PHP / MySQL вставляем строку, затем получаем 'id'

Поле «id» моей таблицы auto увеличивается, когда я вставляю строку. Я хочу вставить строку, а затем получить этот идентификатор.

Я бы сделал это, как я сказал, но есть ли способ, которым я могу это сделать, не беспокоясь о времени между вставкой строки и получением идентификатора?

Я знаю, что могу запросить базу данных для строки, которая соответствует введенной информации, но есть большие изменения, будут дубликаты, с той лишь разницей, что это id.

Solutions Collecting From Web of "PHP / MySQL вставляем строку, затем получаем 'id'"

mysqli_query("INSERT INTO mytable (1, 2, 3, 'blah')"); $id = mysqli_insert_id(); 

См. mysqli_insert_id() .

Независимо от того, что вы делаете, не вставляйте и не делайте « SELECT MAX(id) FROM mytable ». Как вы говорите, это состояние гонки, и нет необходимости. mysqli_insert_id() уже есть эта функция.

Функция LAST_INSERT_ID() MySQL выполняет только то, что вам нужно: она извлекает идентификатор, который был вставлен во время этого сеанса . Таким образом, это безопасно использовать, даже если есть другие процессы (например, другие люди называют тот же самый скрипт), вставляя значения в одну и ту же таблицу.

Функция 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 ( MySQL Improved ) с помощью mysqli_insert_id .

 // 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() ;

При вводе более чем одной строки в то время он не возвращает последний идентификатор , а первый идентификатор коллекции последних вставок.

Рассмотрим следующий пример

 $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 две новые строки. Идентификатор таблицы является автоматическим приращением. Здесь для одного и того же пользователя я добавляю две строки с другим varNumb .

Эхо-значение в конце будет равно идентификатору строки, где varNumb=1 , что означает не идентификатор последней строки, а идентификатор первой строки, который был добавлен в последнем запросе.

Пример.

  $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; отобразит идентификатор последней вставленной строки. Надеюсь это поможет.

Попробуйте это, вы можете получить ответ:

 <?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(); 

Другим возможным ответом будет:

Когда вы определяете таблицу, со столбцами и данными, которые она будет иметь. Идентификатор столбца может иметь свойство AUTO_INCREMENT .

По этому методу вам не нужно беспокоиться об идентификаторе , это будет сделано автоматически .

Например (взято из 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) ) 

Надеюсь, это будет полезно для кого-то.

Изменить: это только та часть, в которой вы определяете, как создать автоматический идентификатор, чтобы получить его после создания, предыдущие ответы правильны.