Creo que con lo que tienes ya está bien, pero como vi tu mensaje y dije

yo tengo algo así, se lo voy a pasar... voy a pensar que nadie más ha respondido y dejar el código aquí

Tengo una clase, este es mi metodo de consulta:
Código :
function enviarConsulta($sql) {
if(!($this->consulta = mysql_query($sql))) {
$this->mysqlErrorHandler($sql);
}
return $this->consulta;
}
si da error se llama a la funcion mysqlErrorHandler pasandole el $SQL completo:
Código :
function mysqlErrorHandler($sql) {
$error = mysql_error();
$errorno = mysql_errno();
if($errorno == 1062) {
preg_match("@.+('.+').+([0-9])$@", $error, $coincidencias);
$sql = "SHOW INDEX from $this->tabla";
$resul = mysql_query($sql);
$campos = "";
$marca = "";
$k = 1;
while($vec = mysql_fetch_assoc($resul)) {
if($k == $coincidencias[2]) {
$campos .= $vec['Column_name'].', ';
}
if($marca != $vec['Key_name']) {
$k += 1;
if($k > $coincidencias[2]) {
break;
}
}
}
$this->error = "Error #$errorno: ".sprintf(REGISTRO_DUPLICADO, substr($campos, 0, -2), $coincidencias[1]);
} else {
//aca manejarias las otras excepciones de otra forma
}
}
aquí hay varios parámetros que tendrías que cambiar para que funcione:
$this->tabla >> nombre de la tabla
REGISTRO_DUPLICADO >> 'Registro duplicado: Ya se encuentra registrado en el sistema los campos "%s" con los valores "%s".'
Esto de devuelve un error con algo como 'Ya se encuentra registrado en el sistema los campos "marca, modelo" con los valores "chevrolet, corsa".'
Básicamente lo que hace el show index es buscar los indices de la tabla que están repetidos y traerlos para imprimirlos en el mensaje junto con los valores que introdujo el usuario. Ya que "key 2" no dice mucho, por ejemplo...
Hasta ahora no he necesitado hacer más submetodos para procesar otros errores, pero si lo necesito solo bastaria agregarlos ahi
Espero le sirva de ayuda a alguien...
Saludos