En otras circunstancias podría tener la tentación de utilizar¿Cómo puedo obtener el ID de la última fila INSERTed usando PDO con SQL Server?
$result = mssql_query("INSERT INTO table (fields) VALUES (data);
SELECT CAST(scope_identity() AS int)");
pero como voy a insertar datos enviados por el usuario, quiero seguir utilizando DOP, que devuelve una matriz vacía.
Desafortunadamente, estoy ejecutando PHP en un servidor Linux y usando dblib para interactuar con Microsoft SQL Server, que no es compatible con PDO::lastInsertID()
.
Por favor ayuda!
actualización para incluir código de ejemplo
Aquí está el código que estoy usando: col1 es un campo de tipo int identity
y col2 es un datetime
su valor predeterminado es getdate()
.
// Connect to db with PDO
$pdo = new PDO('dblib:host=' . $host . ';dbname=' . $database . ';', $username, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
// Connect to db with MSSQL
$sql = mssql_connect($host, $username, $password);
mssql_select_db($database, $sql);
// Create SQL statement
$query = "INSERT INTO [table] (col3, col4, col5)
VALUES ('str1', 'str2', 'str3');
SELECT SCOPE_IDENTITY() AS theID;";
// Run with MSSQL
echo "Using MSSQL...\n";
$result = mssql_query($query);
$the_id = mssql_result($result, 0, 'theID');
echo "Query OK. Returned ID is " . $the_id . "\n";
// Run with PDO
echo "\nUsing PDO...\n";
$stmt = $pdo->query($query);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
print_r($result);
Y esto es lo que se mostrará:
Using MSSQL...
Query OK. Returned ID is 149
Using PDO...
Array
(
)
Me encantaría descubrir que lo que había hecho algo estúpido, en lugar de venir en contra de un callejón sin salida terrible :)
'PDO' aún devuelve una matriz vacía. ¿Estoy haciendo algo mal? – Kalessin
Quizás intente aliasing los resultados: 'SELECT scope_identity() AS id' –
Gracias por su sugerencia. Todavía estoy recibiendo una matriz vacía. He actualizado mi pregunta para incluir el código de prueba que estoy usando. – Kalessin