Как я могу получить идентификатор последней вставленной строки, используя PDO с SQL Server?

При других обстоятельствах у меня может возникнуть соблазн использовать

$result = mssql_query("INSERT INTO table (fields) VALUES (data); 
                       SELECT CAST(scope_identity() AS int)");

, но поскольку я буду вставлять данные, отправленные пользователем, я хочу продолжать использовать PDO, который возвращает пустой массив.

] К сожалению, я запускаю PHP на сервере Linux и использую dblib для взаимодействия с Microsoft SQL Server, который не поддерживает PDO :: lastInsertID () .

Пожалуйста, помогите!

Обновление для включения примера кода

Вот код, который я использую: col1 - это поле типа int identity , а col2 - это datetime со значением по умолчанию ] 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 );

И вот что было показано:

Using MSSQL...
Query OK. Returned ID is 149

Using PDO...
Array
(
)

Мне бы хотелось узнать, что я сделал что-то глупое, вместо того, чтобы попасть в ужасный тупик :)

9
задан Kalessin 26 May 2011 в 16:34
поделиться