To pytanie dotyczy:Pobierz identyfikator wstawionego rekordu: PHP i MS SQL Server
Wersja PHP 5.3.6
staram się poprawnie odzyskać Identyfikator wkładki rekordu za pomocą kombinacji PHP i SQL Server 2005 lub 2008.
To pytanie zakłada istnienie poniższej tabeli :
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)
Gdybym uruchom następującą kwerendę w Management Studio lub za pomocą ASP (Classic), rekord zostanie wstawiony i identyfikator zostanie zwrócony, ale to samo zachowanie nie wydaje się istnieć z PHP i ten sterownik.
INSERT INTO users (username, password, first_name, last_name) VALUES ('x','x','x','x') ; SELECT @@IDENTITY ;
muszę pomóc dowiedzieć się, jak prawidłowo ciągnąć identyfikator albo łańcuchowym SQL razem lub w każdy inny sposób.
Przepracowałem trochę kodu.
Wariant 1 jest prosty select (poprzez zapytania) - bez wstawiania lub ID retrieveal wykonywane
Wariant 2 jest przykuty instrukcja SQL, który wstawia nowy rekord poprawnie, ale nie Zwraca identyfikator
Variation 3 używa (wykonaj) zamiast (zapytanie). Rekord jest wstawiany, ale identyfikator nie jest zwracany. Ten wygenerował błąd, ponieważ polecenie sqlsrv_execute zwraca wartość true/false zamiast zestawu rekordów.
Jak mogę zmodyfikować mój kod, aby wstawić rekord i pobrać identyfikator? (Pracuję przy założeniu, że odpowiedź na to pytanie zostanie rozszerzona na Procedury przechowywane, które również zwracają dane, ale być może tak nie jest)
Dziękuję.
// 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);
Dzięki! To jest kod, który zadziałał dla mnie. (Nie wiem, jak to sformatować poprawnie) $ sql = "WSTAW NA użytkowników (nazwa użytkownika, hasło, pierwsza nazwa, ostatnia nazwa) WARTOŚCI (" x "," x "," x "," x "); WYBIERZ @@ TOŻSAMOŚĆ jako id; " $ result = sqlsrv_query ($ conn, $ sql); $ next_result = sqlsrv_next_result (wynik $); $ row = sqlsrv_fetch_array ($ result); –