2010-12-02 31 views
8

esta consulta funciona bien utilizando el controlador php_mssql:Microsoft's SQLSRV para PHP no devolver ningún resultado cuando se consulta "SELECT SCOPE_IDENTITY() como identificación"

INSERT INTO Table(columnName) VALUES ('text'); 
SELECT SCOPE_IDENTITY() AS id; 

tabla tiene una columna de ID, que es una identidad. Ejecutaría esa consulta y obtengo la última identificación en la tabla.

El mismo código no funciona si la consulta se ejecuta utilizando el controlador php_sqlsrv de Microsoft.

que no se deje ningún error al ejecutar la consulta (sqlsrv_query función), pero me sale el siguiente error al llamar sqlsrv_fetch_array: "El resultado activa para la consulta no contiene campos"

he buscado en Google mucho, y no encontré ninguna respuesta, fue una gran sorpresa para mí que nadie haya enfrentado este problema antes, parece que nadie está usando este controlador, a pesar de que es el "oficial" desde la versión de PHP 5.3 ...

Gracias.

Respuesta

10

En el CTP inicial de los índices de campo comenzaron a 1. Posteriormente fueron cambiados para comenzar a 0.

intentar algo como esto:

// connection to the dbserver 

$result = sqlsrv_query("INSERT INTO Table(columnName) VALUES ('text'); SELECT SCOPE_IDENTITY() AS ID"); 

echo "The last insert_id is".lastId($result); 

function lastId($queryID) { 
    sqlsrv_next_result($queryID); 
    sqlsrv_fetch($queryID); 
    return sqlsrv_get_field($queryID, 0); 
} 
+2

Este código me dio la pista para averiguar what' está sucediendo INSERT_QUERY devuelve 1 resultado y SELECCIONE SCOPE_IDENTITY devuelve otro resultado. Si está apuntando hacia el primer resultado, obtendrá un error si intenta obtener una matriz (la consulta de inserción no devuelve nada), por lo que debe hacer disponible el siguiente resultado (sqlsrv_next_result) y luego puede llamar a sqlsrv_fetch_array. TENGA CUIDADO si está migrando de php_mssql a php_sqlsrv, porque este comportamiento es diferente y posiblemente pueda generar errores. – molerus

+0

Tuve un problema similar; utilicé sqlsrv_next_result ($ result) para resolverlo. Al principio no resolvió el problema; luego descubrí que había una declaración PRINT() en mi SP que causaba el problema. Tuve que eliminar PRINT() y usar sqlsrv_next_result ($ result) también para resolverlo. ¿No tenemos algo que permita que sqlsrv_query() descarte PRINT() ??? –

+0

Tuve el mismo problema con los datos de "Mensajes" generados por SQL Server. El uso de sqlsrv_next_result() lo resolvió. – Alan

Cuestiones relacionadas