2013-12-13 5 views
1

Я хочу вернуть идентификатор после того, как данные будут вставлены в базу данных.Получение неправильного идентификатора с помощью mysqli_insert_id

Существует большая вероятность того, что несколько человек представят свои формы одновременно.

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

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

Было бы лучше сделать запрос о последней записи даты для этого пользователя и вытащить идентификатор оттуда?

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

Или я просто беспокоюсь о чем-то, что не является проблемой?

Спасибо за любой ввод, я довольно новичок в этом.

Ким :)

+1

«В то же время» означает, что масштаб миллисекунд ... это зависит от того, сколько пользователей/второй представить, но я бы назвал это неправдоподобно по крайней мере, , Однако подождите несколько полных ответов, и мы оба узнаем (: –

+1

IIRC, используя транзакции, должны сделать это не проблемой: http://dev.mysql.com/doc/refman/5.6/en/set-transaction.html – Zarathuztra

+0

Посмотрите: http://php.net/manual/en/mysqli.insert-id.php –

ответ

5

last_insert_id() функции -типа привязаны к конкретному соединению DB. Вы НЕ получите идентификатор, который произвел какое-то другое параллельное соединение, вы не получите идентификатор соединения, которое вы сделали с этим скриптом 3 запроса назад.

Это ВСЕГДА быть идентификатор последней вставки вы выполнены с ЭТА частности соединение с базой данных.

Это была бы абсолютно бесполезная функция, если бы она вернула то, что по существу было бы случайным числом. например Рассмотрим серию связанных с родителем/дочерних таблиц. Вы вставляете родительскую запись, пытаетесь получить ее идентификатор и получаете идентификатор какой-либо другой вставки? Теперь вы «потеряли» свою новую запись и привязывали детей к недопустимому родителю.

Nope. Функция работает точно так, как вы ожидали, и вам не нужно беспокоиться о том, чтобы получить неправильный идентификатор. Единственное предостережение в том, что оно только извлекает идентификатор вставки LAST. Если вы добавили 2+ вставки, вы потеряли идентификаторы всех, кроме последней вставки.

-2

вы можете использовать mysql_insert_id как этот

<?php 
$con = mysql_connect("localhost", "peter", "abc123"); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

$db_selected = mysql_select_db("test_db",$con); 

$sql = "INSERT INTO person VALUES ('B�rge','Refsnes','Sandnes','17')"; 
$result = mysql_query($sql,$con); 
echo "ID of last inserted record is: " . mysql_insert_id(); 

mysql_close($con); 
?> 
+0

mysql_ * устарел. Не используйте его, пожалуйста, – Zarathuztra

+0

Я понимаю, что просто использую mysqli процедурный, а не mysql, получил его. мой урок сложный путь с необходимостью переписать вещи из-за обесцененного списка.Я бросил книгу, которую я использовал, и попытаюсь придерживаться онлайн-сайта php. Возможно, однажды я действительно забуду процедурный подход и сосредоточусь на объектно-ориентированном. шаги в это время. Спасибо за все входные данные. –

Смежные вопросы