Как получить идентификатор запроса SQL после его обработки? - PullRequest
2 голосов
/ 06 февраля 2010

Это немного выглядит сложно, я хочу получить значение столбца id обработанного запроса.

пример:

$qu = mysql_query("INSERT INTO msgs (msg,stamp) VALUES('$v1','$v2')");  

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

если это невозможно, будет ли безопасным и гарантированным получение последней записи ID и добавление 1?

Примечание: я использую PHP и MySQL

Спасибо

Ответы [ 7 ]

2 голосов
/ 06 февраля 2010

Если это столбец auto_increment, используйте функцию PHP mysql_insert_id.

2 голосов
/ 06 февраля 2010

Вот документы MySQL по этому вопросу.

http://dev.mysql.com/doc/refman/5.1/en/getting-unique-id.html

1 голос
/ 07 февраля 2010

Вот код:

$qu = mysql_query("INSERT INTO msgs (msg,stamp) VALUES('$v1','$v2')"); 
$recent_id = mysql_insert_id();

Переменная Recent_id - это то, что вы ищете.

Получение последней записи идентификатора и добавление 1 МОЖЕТ быть небезопасным и НЕ гарантировано. Вам лучше использовать решение, которое я указал, если вы действительно хотите быть безопасным.

Надеюсь, это поможет.

1 голос
/ 06 февраля 2010

Нет, захватить самый высокий идентификатор небезопасно, просто добавить 1 и использовать его в качестве нового идентификатора. Это то, что известно как состояние гонки. Если два запроса пытаются выполнить эту операцию одновременно, может случиться так, что оба они выберут ОДИН И ТО ЖЕ САМЫЙ самый высокий идентификатор, оба попытаются добавить 1, а затем ОБА попытаются использовать один и тот же идентификатор (что было бы неверно).

Гораздо лучше использовать поля AUTO_INCREMENT, как вы делаете, и вы можете получить вставленный идентификатор в PHP следующим образом (из http://php.net/manual/en/function.mysql-insert-id.php):

<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
    die('Could not connect: ' . mysql_error());
}
mysql_select_db('mydb');

mysql_query("INSERT INTO mytable (product) values ('kossu')");
printf("Last inserted record has id %d\n", mysql_insert_id());
?>
1 голос
/ 06 февраля 2010

Если вы используете стандартный mysql в PHP, все, что вам нужно сделать, это использовать mysql_insert_id(), который принимает ресурс $link в качестве параметра (ваше соединение с mysql)

http://php.net/manual/en/function.mysql-insert-id.php

Основное использование:

<?php
    $link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
    if (!$link) {
        die('Could not connect: ' . mysql_error());
    }
    mysql_select_db('mydb');

    mysql_query("INSERT INTO mytable (product) values ('some product')");

    echo 'Last inserted record has id of ' . mysql_insert_id();
?>
0 голосов
/ 06 февраля 2010

отметьте здесь , если для вас не проблема использовать mysqli для php

0 голосов
/ 06 февраля 2010

Надеюсь, это поможет:

int mysql_insert_id ([ resource $link_identifier ] )

http://us3.php.net/mysql_insert_id

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...