Esta pregunta se refiere a:Recuperar el ID de un registro insertado: SERVIDOR PHP y MS SQL
PHP versión 5.3.6
estoy tratando de recuperar adecuadamente el ID de una inserción de registro usando una combinación de PHP y SQL Server 2005 o 2008.
Esta pregunta asume la existencia de la siguiente tabla :
CREATE TABLE users([id] [int] IDENTITY(1,2) NOT NULL,[username] [varchar](50) NOT NULL,[password] [varchar](40) NOT NULL,[first_name] [varchar](30) NOT NULL,[last_name] [varchar](30) NOT NULL)
Si tuviera que ejecutar la siguiente consulta en Management Studio o mediante ASP (Classic), se inserta un registro y se devolvería una identificación, pero no parece existir con el mismo comportamiento PHP y este controlador.
INSERT INTO users (username, password, first_name, last_name) VALUES ('x','x','x','x') ; SELECT @@IDENTITY ;
Necesito ayuda para encontrar la manera de tirar adecuadamente una identificación ya sea por el encadenamiento de las sentencias SQL juntos o por cualquier otro método.
He trabajado algún código.
Variación 1 es un selecto sencilla (a través de la consulta) - sin inserción o ID retrieveal realiza
Variación 2 es una instrucción SQL en cadena que se inserta el nuevo disco correctamente, pero no devuelve el ID
Variación 3 usos (ejecución) en lugar de (consulta). El registro se inserta, pero la ID no se devuelve. Este generó un error porque sqlsrv_execute devuelve verdadero/falso en lugar de un conjunto de registros.
Entonces, ¿cómo puedo modificar mi código para insertar un registro y recuperar un ID? (Estoy trabajando en la suposición de que la respuesta a esta pregunta se extenderá a los Procedimientos almacenados que también devuelven datos, pero tal vez ese no sea el caso)
Gracias.
// Database connection
// -------------------------------------------------------------------------------------------------------
$conn = sqlsrv_connect(DB_SERVER,array("UID" => DB_USER, "PWD" => DB_PASSWORD, "Database"=> DB_NAME));
// Variation 1, straight select
// -------------------------------------------------------------------------------------------------------
$sql = "SELECT * FROM users;";
$result = sqlsrv_query($conn,$sql);
$row = sqlsrv_fetch_array($result);
// Variation 2, Insert new record and select @@IDENTITY
// -------------------------------------------------------------------------------------------------------
$sql = "INSERT INTO users (username, password, first_name, last_name) VALUES ('x','x','x','x') ; SELECT @@IDENTITY ;";
$result = sqlsrv_query($conn,$sql);
$row = sqlsrv_fetch_array($result);
// Variation 3, using EXECUTE instead of QUERY
// -------------------------------------------------------------------------------------------------------
//$sql = "INSERT INTO users (username, password, first_name, last_name) VALUES ('x','x','x','x') ; SELECT @@IDENTITY as id ;";
$sql = "INSERT INTO users (username, password, first_name, last_name) VALUES ('x','x','x','x') ; SELECT SCOPE_IDENTITY() as id ;";
$stmt = sqlsrv_prepare($conn, $sql);
$result = sqlsrv_execute($stmt);
$row = sqlsrv_fetch_array($result);
¡Gracias! Este es el código que funcionó para mí. (No sé cómo formatear esto correctamente) $ sql = "INSERT INTO users (username, password, first_name, last_name) VALUES ('x', 'x', 'x', 'x'); SELECT @@ IDENTITY como id; " $ result = sqlsrv_query ($ conn, $ sql); $ next_result = sqlsrv_next_result ($ result); $ row = sqlsrv_fetch_array ($ result); –