Probleme mysql_insert_id

bonjour , j ai un soucis avec mysql_insert_id j obtient toujour le resultat 0 , je suis dans une boucle while

$sql = "INSERT INTO ma_table (id_reg, id_dep, id_cat, email, password, code_pos, ville, status, type, nom, tel, titre, ann, prix, etat, date, tel_cache, ip, xml_key) VALUES(’$id_reg’, ‘$id_dep’, ‘$id_cat’, ‘$email’, ‘$password’, ‘$code_pos’, ‘$ville’, ‘$statut’, ‘$type’, ‘$nom’, ‘$tel’, ‘$titre’, ‘$texte’, ‘$prix’, ‘2’, ‘$time’, ‘$tel_cache’, ‘$ip’, ‘$xml_key’)ON DUPLICATE KEY UPDATE id_reg = VALUES(id_reg), id_dep = VALUES(id_dep), id_cat = VALUES(id_cat), email = VALUES(email), code_pos = VALUES(code_pos), ville = VALUES(ville), nom = VALUES(nom), tel = VALUES(tel), titre = VALUES(titre), ann = VALUES(ann), prix = VALUES(prix), tel_cache = VALUES(tel_cache)"or die(mysql_error());

$result= MYSQL_QUERY($sql);
$id_ann = MYSQL_INSERT_ID();
	echo $id_ann;

Probablement parce que tu as déjà une valeur et que cela ne te ramène rien en conséquence ? (cf. dev.mysql.com… : If a table contains an AUTO_INCREMENT column and INSERT … UPDATE inserts a row, the LAST_INSERT_ID() function returns the AUTO_INCREMENT value. If the statement updates a row instead, LAST_INSERT_ID() is not meaningful. However, you can work around this by using LAST_INSERT_ID(expr).

Cela ne fonctionne pas par exemple il commence a compter a partir de 4 alors que l id de ma tables correspond a 652.

Voici mon code:

$id_ann = mysql_query(‘SELECT LAST_INSERT_ID(id_ann) FROM PAG_annonces’);
Edité le 07/07/2013 à 10:00

Non, mais je t’ai filé ce lien car tu fais des INSERT avec des “ON DUPLICATE KEY”, ce qui laisse supposer que tu en comprends/comprennes le fonctionnement. Si tu ne comprends pas le fonctionnement, alors Keep It Simple And Stupid !

$sql = sprintf("insert into table (a,b,c) values('%1$s', '%2$s', '%3$s')", 
mysql_real_escape_string($a),
mysql_real_escape_string($b),
mysql_real_escape_string($c));
$result= mysql_query($sql) or die(mysql_error());
$id_ann = mysql_insert_id() or die(mysql_error());
echo $id_ann; 

Et pour le cas du “4”, cf : searchcode.com…

resource mysql_query ( string $query [, resource $link_identifier ] )

Cela te renvoie une ressource, pas un résultat de requête. 4 est “normal”, mais ça pourrait être une autre valeur.