Necesito la identificación del último objeto insertado. Uso declaraciones preparadas para evitar la inyección de sql. Pero no estoy seguro de cómo obtener la identificación.Acceda a la identificación del objeto insertado después de una instrucción preparada en PHP usando MYSQLi
$sql = "INSERT IGNORE INTO faculty (id, term, role, prefix, first_name,
middle_name, last_name, suffix) VALUES (?,?,?,?,?,?,?,?)";
if (!($stmt = $mysqli->prepare($sql)))
echo "Faculty Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error;
$stmt->bind_param('sissssss',
$faculty['id'],
$faculty['term'],
$faculty['role'],
$faculty->name->prefix,
$faculty->name->first,
$faculty->name->middle,
$faculty->name->last,
$faculty->name->suffix
);
if (!$stmt->execute())
echo "Faculty Execute failed: (" . $mysqli->errno . ") " . $mysqli->error;
$result = $stmt->insert_id;
echo "\n Result:" . $result;
$stmt->close();
El resultado es 0 siempre a pesar de ser una entrada en la base de datos
Solución estaba siendo inserta el elemento en la base de datos. El problema fue cuando creé que la identificación de la tabla no era un entero; era una varchar que representaba una identificación de empleado. Para solucionar esto, agregué la identificación del empleado como una columna adicional en la tabla y usé la clave primaria id int auto_increment por defecto y funcionó.
De hecho, me encontré con que la función y trató de usarlo sin embargo, se vuelve constante 0. – user1165788
cheque cordura - no que en realidad definitivamente insertar una fila? Es decir. ¿hizo el 'INSERT' o el' IGNORE'? – Joe
Lo descubrí. Se estaba insertando en la tabla, pero luego me di cuenta de que mi ID de clave principal era un código de empleado que estaba configurando para que no devolviera el valor de la clave principal. Acabo de establecer el código de empleado como una columna adicional en la base de datos y usé el ID de incremento automático predeterminado como la clave principal y funcionó. – user1165788