2009-03-13 21 views
2

mysqlでストアドプロシージャを定義しています(proc_create_node(親INT))を挿入します。ストアドプロシージャを呼び出した後にPHPからLAST_INSERT_ID()を呼び出す

私はちょうど罰金以下の作業を行って、MySQLのCLIからそれを呼び出す:

CALL proc_create_node(12); 
SELECT LAST_INSERT_ID(); 

と私は最後に挿入IDを取得:今、私はからこれらの行を呼び出すとき

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

をphp、またはmysql_insert_id() php関数を使用すると、私はいつもに戻ります。

何が欠けていますか?どのように私はPHP内で最後に挿入されたIDを得ることができますか?それがここで働いているピエール

答えて

1

あなた...:

$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またはmysqlのバージョン(かなりのバグが発生している場所)にある必要があります。

btw:SELECT LAST_INSERT_ID()mysql_insert_id()に置き換えたものがではなく、ここで働いています。

1

データベース接続と関係する可能性があります - LAST_INSERT_ID()関数は接続ごとに機能しませんか?

SELECT LAST_INSERT_ID()をストアドプロシージャに追加し、ストアドプロシージャを修正して前記IDを返すことをお勧めしますか?

1

ここmysqli_multy_queryの使用状況をチェックしてください:http://ua.php.net/manual/en/mysqli.multi-query.php

をこの関数は、あなたのような複数文のクエリで動作するように設計されています。しかし、それを使用するには、php_mysqliモジュールで作業する必要があります。これは、古いアプリケーションをサポートしていれば単純ではないphp_mysqlではありません。

第2に、SELECT LAST_INSERT_ID()をストアドプロシージャに配置し、実行結果で受け取ることができます。

どちらの方法も試してみる価値がありますが、2番目の方法は非常に簡単で、php_mysqlで動作します。