PHP
Korzystanie z SQLSRV
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 />";
}
}
}