получить доступ к LAST_INSERT_ID () из php после вызова хранимой процедуры - PullRequest
2 голосов
/ 13 марта 2009

Я определил хранимую процедуру (давайте назовем ее proc_create_node (parent INT) ) в mysql, которая выполняет вставку.

когда я вызываю его из mysql cli, выполнение следующих работ прекрасно работает:

CALL proc_create_node(12);
SELECT LAST_INSERT_ID();

и я получаю последний вставленный идентификатор:

+------------------+
| LAST_INSERT_ID() |
+------------------+
|               15 | 
+------------------+

Теперь, когда я вызываю эти строки из php, или если я использую функцию mysql_insert_id () php, я всегда возвращаюсь 0 .

что мне не хватает? Как я могу получить последний вставленный идентификатор в php?

твой ... Пьер

Ответы [ 3 ]

1 голос
/ 13 марта 2009

Возможно, это связано с подключением к базе данных - разве функция LAST_INSERT_ID () не работает для каждого подключения?

Как вы думаете, было бы неплохо добавить SELECT LAST_INSERT_ID () в хранимую процедуру и изменить хранимую процедуру для возврата указанного идентификатора?

1 голос
/ 15 марта 2009

Проверьте использование mysqli_multy_query здесь: http://ua.php.net/manual/en/mysqli.multi-query.php

Эта функция предназначена для работы с запросами с несколькими утверждениями, такими как ваш. Но чтобы использовать это, вам нужно работать через модуль php_mysqli, а не через php_mysql, что непросто, если вы поддерживаете старое приложение.

Второе - вы можете поместить SELECT LAST_INSERT_ID () в вашу хранимую процедуру и получить ее в результате выполнения.

Стоит попробовать оба способа, но второй гораздо проще и работает с php_mysql.

1 голос
/ 13 марта 2009

здесь работает:

$link = mysql_connect('localhost', 'root', '');
if (!$link) {
   die('Not connected : ' . mysql_error());
}

$db_selected = mysql_select_db('test', $link);
if (!$db_selected) {
   die ('Can\'t use test : ' . mysql_error());
}
$result = mysql_query('CALL blub(12)');
if (!$result) {
   die('Invalid query: ' . mysql_error());
}
$result = mysql_query('SELECT LAST_INSERT_ID()');
if (!$result) {
   die('Invalid query: ' . mysql_error());
}

print_r(mysql_fetch_assoc($result));

печатает увеличивающееся целое число. MySQL 5.1.30 и php 5.2.9-1.

так что проблема должна быть в вашем php-коде, в вашей хранимой процедуре (передаете ли вы действительные параметры из php?) Или в ваших версиях php или mysql (где могут быть некоторые ошибки).

Кстати: замена SELECT LAST_INSERT_ID() на mysql_insert_id() - это , а не , работающий здесь.

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