2009-03-13 5 views
2

J'ai défini une procédure stockée (appelons-la proc_create_node (parent INT)) dans mysql qui fait une insertion.accéder à LAST_INSERT_ID() depuis php après avoir appelé une procédure stockée

quand je l'appelle de la cli mysql, faire les travaux suivants très bien:

CALL proc_create_node(12); 
SELECT LAST_INSERT_ID(); 

et je reçois le dernier ID inséré:

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

maintenant, quand j'appelle ces lignes de php, ou si j'utilise la fonction PHP mysql_insert_id(), je reviens toujours .

Que manque-t-il? comment pourrais-je obtenir le dernier identifiant inséré dans php?

vôtre ... pierre

Répondre

1

il travaille ici:

$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)); 

imprime un entier de plus en plus. mysql 5.1.30 et php 5.2.9-1. Donc le problème doit être dans votre code php, dans votre procédure stockée (passez-vous des paramètres valides de php?) Ou dans vos versions de php ou mysql (où il y a quelques bugs).

btw: le remplacement SELECT LAST_INSERT_ID() avec mysql_insert_id() est pas fonctionnant ici.

1

Cela peut être lié à la connexion à la base de données: la fonction LAST_INSERT_ID() ne fonctionne-t-elle pas par connexion?

Pensez-vous que ce serait une bonne idée d'ajouter le SELECT LAST_INSERT_ID() dans la procédure stockée et de modifier la procédure stockée pour renvoyer ledit ID?

1

Découvrez l'utilisation de mysqli_multy_query ici: http://ua.php.net/manual/en/mysqli.multi-query.php

Cette fonction est conçue pour fonctionner avec des requêtes multi-états comme la vôtre. Mais pour utiliser cela, vous devez travailler via le module php_mysqli et non via php_mysql, ce qui n'est pas simple si vous prenez en charge une ancienne application. Deuxièmement, vous pouvez mettre SELECT LAST_INSERT_ID() dans votre procédure stockée et le recevoir dans le résultat de l'exécution.

Les deux façons valent la peine d'essayer, mais la seconde est très simple et fonctionne avec php_mysql.

Questions connexes