2012-02-09 19 views
6

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ó.

Respuesta

3

intente cambiar $result = $stmt->get_result(); a $result = $stmt->insert_id;

get_result() es más para SELECT consultas, en lugar de INSERT s.

http://php.net/manual/en/mysqli-stmt.get-result.php

http://php.net/manual/en/mysqli-stmt.insert-id.php

+0

De hecho, me encontré con que la función y trató de usarlo sin embargo, se vuelve constante 0. – user1165788

+1

cheque cordura - no que en realidad definitivamente insertar una fila? Es decir. ¿hizo el 'INSERT' o el' IGNORE'? – Joe

+0

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

Cuestiones relacionadas