mysqli_insert_id: Что, если кто-то вставляет другую строку непосредственно перед тем, как я позвоню?

Мой вопрос довольно простой. Я читал, что рекомендуемый метод получения значения auto_increment / id строки, которую я вставил в mysqli, – это mysqli_insert_id() . Тем не менее, я не слишком хорошо знаком и задал вопрос: (Это все теоретически на данный момент)

Для этих целей (отсюда бит mysqli) все это будет из веб-приложения PHP. Скажите, что несколько пользователей находятся в приложении одновременно, а другая строка вставлена ​​с другой страницы между тем временем, когда я вставляю свою строку и время, которое я вызываю mysqli_insert_id() ?

Будет ли это возвращать неправильное значение, или у MySQL есть какая-то особенность, чтобы предотвратить такую ​​вещь? Или я просто переоцениваю возможность такого сценария?

Спасибо за ваше время.

Related of "mysqli_insert_id: Что, если кто-то вставляет другую строку непосредственно перед тем, как я позвоню?"

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

Существует два способа вызова этого метода:

  1. Объектно-ориентированный$mysqli->insert_id ;
  2. Процедурный (как вы указали) – mysqli_insert_id(mysqli $link)

В обоих случаях последний идентификатор вставки относится к соединению, которое вы установили с базой данных. Для объяснения, хотя я считаю, что объектно-ориентированный подход обеспечивает большую ясность. Рассмотрим следующий код:

 $mysqli = new mysqli('host','username','password','database'); // Insert into table with an AUTO INCREMENT field defined` if ($result = $mysqli->query("INSERT INTO table (somefield) VALUES ('somevalue');")) { echo 'The ID is: '.$mysqli->insert_id; } 

$insert_id экземпляра $insert_id обновляется всякий раз, когда вызывается функция запроса. Таким образом, удерживаемая ценность находится только в пределах вашего кода и не относится к другим взаимодействиям с базой данных каким-либо другим процессом.

Однако есть некоторые интересные замечания. Например, если вы решите делать массовые вставки, например

$mysqli->query("INSERT INTO table (somefield) VALUES ('somevalue'), ('anothervalue');")

Он вернет идентификатор первой строки, вставленной, а не последней.

Для дальнейшего чтения PHP Doc дает больше разъяснений.