Этот вопрос относится к:
PHP версии 5.3.6
Драйверы Microsoft для PHP для SQL Server
Я пытаюсь правильно получить идентификатор вставки записи, используя комбинацию PHP и SQL Server 2005 или 2008.
В этом вопросе предполагается наличие следующей таблицы:
CREATE TABLE users([id] [int] IDENTITY(1,2) NOT NULL,[username] [varchar](50) NOT NULL,[password] [varchar](40) NOT NULL,[first_name] [varchar](30) NOT NULL,[last_name] [varchar](30) NOT NULL)
Если бы я выполнил следующий запрос в Management Studio или через ASP (Classic), была бы вставлена запись и был бы возвращен идентификатор, но, похоже, такого же поведения нет в PHP и этом драйвере.
INSERT INTO users (username, password, first_name, last_name) VALUES ('x','x','x','x') ; SELECT @@IDENTITY ;
Мне нужна помощь, чтобы выяснить, как правильно извлекать идентификатор, объединяя операторы SQL вместе или любым другим методом.
Я обработал некоторый код.
Вариант 1 - это простой выбор (с помощью запроса) - вставка или извлечение идентификатора не выполняются
Вариант 2 - оператор SQL в виде цепочки, который правильно вставляет новую запись, но не возвращает идентификатор
VariatИон 3 использует (выполнить) вместо (запрос).Запись вставлена, но идентификатор не возвращается.Эта ошибка вызвала ошибку, потому что sqlsrv_execute возвращает true / false вместо набора записей.
Итак, как я могу изменить свой код для вставки записи и получения идентификатора?(Я работаю в предположении, что ответ на этот вопрос будет распространяться на хранимые процедуры, которые также возвращают данные, но, возможно, это не так)
Спасибо.
// Database connection
// -------------------------------------------------------------------------------------------------------
$conn = sqlsrv_connect(DB_SERVER,array("UID" => DB_USER, "PWD" => DB_PASSWORD, "Database"=> DB_NAME ));
// Variation 1, straight select
// -------------------------------------------------------------------------------------------------------
$sql = "SELECT * FROM users;";
$result = sqlsrv_query($conn,$sql);
$row = sqlsrv_fetch_array($result);
// Variation 2, Insert new record and select @@IDENTITY
// -------------------------------------------------------------------------------------------------------
$sql = "INSERT INTO users (username, password, first_name, last_name) VALUES ('x','x','x','x') ; SELECT @@IDENTITY ;";
$result = sqlsrv_query($conn,$sql);
$row = sqlsrv_fetch_array($result);
// Variation 3, using EXECUTE instead of QUERY
// -------------------------------------------------------------------------------------------------------
//$sql = "INSERT INTO users (username, password, first_name, last_name) VALUES ('x','x','x','x') ; SELECT @@IDENTITY as id ;";
$sql = "INSERT INTO users (username, password, first_name, last_name) VALUES ('x','x','x','x') ; SELECT SCOPE_IDENTITY() as id ;";
$stmt = sqlsrv_prepare( $conn, $sql);
$result = sqlsrv_execute($stmt);
$row = sqlsrv_fetch_array($result);