¿Hay alguna forma de recuperar el ID de un registro (clave principal) después de una inserción cuando el error mysql devuelve una clave duplicada?Obtener ID de registro cuando mysql devuelve un error duplicado
E.G. Cómo iba a ir sobre ella:
$sql = "INSERT INTO table (`col1`, `col2`) VALUES ('$val1', '$val2')";
$result = mysql_query($sql);
if($result){
$id = mysql_insert_id();
}
else {
if(stristr(mysql_error(), "duplicate"){
$sql = "SELECT `id` FROM `table` WHERE `col1`='$val1' AND `col2`='$val2'";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
$id = $row['id'];
}
else {
die(mysql_error());
}
}
Aquí he tenido que hacer dos sentencias SQL que no sólo toman tiempo y esfuerzo, pero duplican código.
No puedo usar ON DUPLICATE KEY UPDATE
porque deseo actualizar una tabla diferente usando la última identificación insertada o la identificación del registro que no se puede duplicar.
Entonces, ¿tengo razón en lo que estoy haciendo? ¿O hay una forma de obtener la identificación de la fila?
Gracias
Genial, gracias por la información y los consejos. –
Me alegro de que haya ayudado. Permítanme agregar una nota: obviamente, 'FOR UPDATE' no bloqueará nada si no hay coincidencias. Todavía puede obtener el registro creado por otro proceso simultáneo justo después del control. Solo tenlo en cuenta. –
Ok, gracias. No estoy usando InnoDB, y nunca lo hice, ¡así que no estoy seguro de lo que estás hablando! : p Pero lo investigaré. :) –