Это жарит мне мозг последние несколько часов …
Я вставляю строку в таблицу, но я также хочу сообщить идентификатор введенной строки.
Столбец ID в моей таблице установлен как INT, а в качестве Identity Specification установлено значение Yes. Приращение 1 и Семя 1. Ничего необычного!
Код для вставки и последующего отчета по вставленной строке выглядит следующим образом;
$sql = <<<SQL
INSERT INTO dbo.table (field1, field2)
VALUES (
'{$field1}',
'{$field2}'
);
SELECT @@IDENTITY as id
SQL;
$result = sqlsrv_query($conn, $sql);
if($result === false){
die(print_r(sqlsrv_errors(), true));
}
else{
sqlsrv_next_result($result);
$row = sqlsrv_fetch_object($result);
if($row === FALSE){
die(print_r(sqlsrv_errors()));
}
print "Inserted: ".$row->id;
}
Код умирает на if($row === FALSE)
и сообщение об ошибке выглядит следующим образом;
Array ( [0] => Array ( [0] => IMSSP [SQLSTATE] => IMSSP [1] => -28 [code] => -28 [2] => The active result for the query contains no fields. [message] => The active result for the query contains no fields. ) ) 1
ВСТАВКА работает! Если я проверю базу данных после того, как увижу вновь введенную строку.
* НО *
Если я распечатаю созданный SQL-запрос и вручную запускаю его в Management Studio, оператор вставки работает И в области результатов я вижу одну строку данных с заголовком столбца идентификатора, который содержит идентификатор только что созданной строки.
Кто-нибудь знает, что здесь происходит?
Спасибо,
Стив
Задача ещё не решена.
Других решений пока нет …