При других обстоятельствах у меня может возникнуть желание использовать
$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
(
)
Мне бы очень хотелось узнать, что я сделал что-то глупое, а не натолкнуться на ужасный тупик:)