PHP / MySQL вставить строку, затем получить 'id'
поле " id " моей таблицы автоматически увеличивается при вставке строки. Я хочу вставить строку, а затем получить этот ID.
Я бы сделал это так, как я сказал, но есть ли способ сделать это, не беспокоясь о времени между вставкой строки и получением идентификатора?
Я знаю, что могу запросить базу данных для строки, которая соответствует введенной информации, но есть высокое изменение, там будут дубликаты, с единственной разницей-идентификатор.
10 ответов
$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()
делает только то, что вам нужно: он получает код, который был вставлен во время сессии. Поэтому безопасно использовать, даже если есть другие процессы (например, другие люди, вызывающие тот же самый скрипт), вставляющие значения в ту же таблицу.
функция 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 Улучшенное) через функция 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()
;
при вводе более одной строки в то время, он не возвращает последний 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
две новые строки. Идентификатор таблицы-auto-increment. Здесь, для того же пользователя, я добавляю две строки с другим varNumb
.
повторил значение в конце будет равно id строки, где 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();
попробуйте это... у меня получилось!
$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);
}
другой возможный ответ будет:
при определении таблицы, столбцы и данные его есть. Идентификатор столбца может иметь свойство типа 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)
)
надеюсь, что это будет полезно для кого-то.
Edit: Это это только часть, где вы определяете, как создать автоматический идентификатор, чтобы получить его после создания, предыдущие ответы до этого правы.