Szukaj…


Uwagi

Sterownik SQLSRV to obsługiwane przez Microsoft rozszerzenie PHP, które umożliwia dostęp do baz danych Microsoft SQL Server i SQL Azure. Jest to alternatywa dla sterowników MSSQL, które były przestarzałe od PHP 5.3 i zostały usunięte z PHP 7.


Rozszerzenia SQLSRV można używać w następujących systemach operacyjnych:

  • Windows Vista Service Pack 2 lub nowszy
  • Windows Server 2008 Service Pack 2 lub nowszy
  • Windows Server 2008 R2
  • System Windows 7

Rozszerzenie SQLSRV wymaga, aby klient macierzysty Microsoft SQL Server 2012 był zainstalowany na tym samym komputerze, na którym działa PHP. Jeśli macierzysty klient Microsoft SQL Server 2012 nie jest jeszcze zainstalowany, kliknij odpowiedni link na stronie dokumentacji „Wymagania” .


Aby pobrać najnowsze sterowniki SQLSRV, przejdź do: Pobierz

Pełna lista wymagań systemowych dla sterowników SQLSRV znajduje się tutaj: Wymagania systemowe

Użytkownicy korzystający z SQLSRV 3.1+ muszą pobrać sterownik Microsoft ODBC 11 dla programu SQL Server

Użytkownicy PHP7 mogą pobierać najnowsze sterowniki z GitHub

Sterownik Microsoft® ODBC 13 dla SQL Server obsługuje Microsoft SQL Server 2008, SQL Server 2008 R2, SQL Server 2012, SQL Server 2014, SQL Server 2016 (wersja zapoznawcza), system platform analitycznych, bazę danych Azure SQL i usługę Azure SQL Data Warehouse.

Tworzenie połączenia

$dbServer = "localhost,1234"; //Name of the server/instance, including optional port number (default is 1433)
$dbName = "db001"; //Name of the database
$dbUser = "user"; //Name of the user
$dbPassword = "password"; //DB Password of that user

$connectionInfo = array(
    "Database" => $dbName, 
    "UID" => $dbUser,
    "PWD" => $dbPassword
);

$conn = sqlsrv_connect($dbServer, $connectionInfo);

SQLSRV ma również sterownik PDO. Aby połączyć za pomocą PDO:

$conn = new PDO("sqlsrv:Server=localhost,1234;Database=db001", $dbUser, $dbPassword);

Proste zapytanie

//Create Connection
$conn = sqlsrv_connect($dbServer, $connectionInfo);

$query = "SELECT * FROM [table]"; 
$stmt = sqlsrv_query($conn, $query);

Uwaga: użycie nawiasów kwadratowych [] służy do ucieczki od table słów, ponieważ jest to słowo zastrzeżone . Działają one w taki sam sposób, jak backty ` robi w MySQL .

Wywoływanie procedury składowanej

Aby wywołać procedurę przechowywaną na serwerze:

$query = "{call [dbo].[myStoredProcedure](?,?,?)}"; //Parameters '?' includes OUT parameters

$params = array(
    array($name, SQLSRV_PARAM_IN),
    array($age, SQLSRV_PARAM_IN),
    array($count, SQLSRV_PARAM_OUT, SQLSRV_PHPTYPE_INT) //$count must already be initialised
);

$result = sqlsrv_query($conn, $query, $params);

Wykonywanie sparametryzowanych zapytań

$conn = sqlsrv_connect($dbServer, $connectionInfo);

$query = "SELECT * FROM [users] WHERE [name] = ? AND [password] = ?";
$params = array("joebloggs", "pa55w0rd");

$stmt = sqlsrv_query($conn, $query, $params);

Jeśli planujesz używać tej samej instrukcji zapytania więcej niż raz, z różnymi parametrami, to samo można osiągnąć za pomocą sqlsrv_prepare() i sqlsrv_execute() , jak pokazano poniżej:

$cart = array(
    "apple" => 3,
    "banana" => 1,
    "chocolate" => 2
);

$query = "INSERT INTO [order_items]([item], [quantity]) VALUES(?,?)";
$params = array(&$item, &$qty); //Variables as parameters must be passed by reference

$stmt = sqlsrv_prepare($conn, $query, $params);

foreach($cart as $item => $qty){
    if(sqlsrv_execute($stmt) === FALSE) {
        die(print_r(sqlsrv_errors(), true));
    }
}

Pobieranie wyników zapytania

Istnieją 3 główne sposoby pobierania wyników z zapytania:

sqlsrv_fetch_array ()

sqlsrv_fetch_array() pobiera następny wiersz jako tablicę.

$stmt = sqlsrv_query($conn, $query);

while($row = sqlsrv_fetch_array($stmt)) {
    echo $row[0];
    $var = $row["name"];
    //...
}

sqlsrv_fetch_array() ma opcjonalny drugi parametr do pobrania różnych typów tablic: SQLSRV_FETCH_ASSOC , SQLSRV_FETCH_NUMERIC i SQLSRV_FETCH_BOTH (domyślnie) ; każda zwraca odpowiednio tablice asocjacyjne, numeryczne lub asocjacyjne i numeryczne.


sqlsrv_fetch_object ()

sqlsrv_fetch_object() pobiera następny wiersz jako obiekt.

$stmt = sqlsrv_query($conn, $query);

while($obj = sqlsrv_fetch_object($stmt)) {
    echo $obj->field; // Object property names are the names of the fields from the query
    //...
}

sqlsrv_fetch ()

sqlsrv_fetch() udostępnia następny wiersz do odczytu.

$stmt = sqlsrv_query($conn, $query);

while(sqlsrv_fetch($stmt) === true) {
    $foo = sqlsrv_get_field($stmt, 0); //gets the first field -
}

Pobieranie komunikatów o błędach

Jeśli zapytanie nie powiedzie się, ważne jest, aby pobrać komunikaty o błędach zwrócone przez sterownik, aby zidentyfikować przyczynę problemu. Składnia jest następująca:

sqlsrv_errors([int $errorsOrWarnings]);

Zwraca tablicę z:

Klucz Opis
SQLSTATE Stan, w którym znajduje się sterownik SQL Server / OBDC
kod Kod błędu programu SQL Server
wiadomość Opis błędu

Często używa się powyższej funkcji:

$brokenQuery = "SELECT BadColumnName FROM Table_1";
$stmt = sqlsrv_query($conn, $brokenQuery);

if ($stmt === false) {
    if (($errors = sqlsrv_errors()) != null) {
        foreach ($errors as $error) {
            echo "SQLSTATE: ".$error['SQLSTATE']."<br />";
            echo "code: ".$error['code']."<br />";
            echo "message: ".$error['message']."<br />";
        }
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow