PHP
SQLSRV verwenden
Suche…
Bemerkungen
Der SQLSRV-Treiber ist eine von Microsoft unterstützte PHP-Erweiterung, mit der Sie auf Microsoft SQL Server- und SQL Azure-Datenbanken zugreifen können. Es ist eine Alternative für die MSSQL-Treiber, die seit PHP 5.3 nicht mehr verwendet werden und aus PHP 7 entfernt wurden.
Die SQLSRV-Erweiterung kann auf folgenden Betriebssystemen verwendet werden:
- Windows Vista Service Pack 2 oder höher
- Windows Server 2008 Service Pack 2 oder höher
- Windows Server 2008 R2
- Windows 7
Für die SQLSRV-Erweiterung muss der Microsoft SQL Server 2012-Client auf demselben Computer installiert sein, auf dem PHP ausgeführt wird. Wenn der native Microsoft SQL Server 2012-Client noch nicht installiert ist, klicken Sie auf der Dokumentationsseite "Anforderungen" auf den entsprechenden Link.
Gehen Sie zum Herunterladen der neuesten SQLSRV-Treiber folgendermaßen vor: Download
Eine vollständige Liste der Systemanforderungen für die SQLSRV-Treiber finden Sie hier: Systemanforderungen
Benutzer, die SQLSRV 3.1 oder höher verwenden, müssen den Microsoft ODBC Driver 11 für SQL Server herunterladen
PHP7-Benutzer können die neuesten Treiber von GitHub herunterladen
Microsoft® ODBC Driver 13 für SQL Server unterstützt Microsoft SQL Server 2008, SQL Server 2008, SQL Server 2012, SQL Server 2016 (Vorschau), Analytics Platform System, Azure SQL-Datenbank und Azure SQL Data Warehouse.
Verbindung herstellen
$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 hat auch einen PDO-Treiber. Verbindung über PDO herstellen:
$conn = new PDO("sqlsrv:Server=localhost,1234;Database=db001", $dbUser, $dbPassword);
Eine einfache Abfrage erstellen
//Create Connection
$conn = sqlsrv_connect($dbServer, $connectionInfo);
$query = "SELECT * FROM [table]";
$stmt = sqlsrv_query($conn, $query);
Hinweis: Die Verwendung von eckigen Klammern []
dient dazu, die Worttabelle zu table
da es ein reserviertes Wort ist . Diese arbeiten in der gleichen Weise wie Backticks `
tun in MySQL.
Eine gespeicherte Prozedur aufrufen
So rufen Sie eine gespeicherte Prozedur auf dem Server auf:
$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);
Eine parametrisierte Abfrage erstellen
$conn = sqlsrv_connect($dbServer, $connectionInfo);
$query = "SELECT * FROM [users] WHERE [name] = ? AND [password] = ?";
$params = array("joebloggs", "pa55w0rd");
$stmt = sqlsrv_query($conn, $query, $params);
Wenn Sie planen, dieselbe Abfrageanweisung mehr als einmal mit anderen Parametern zu verwenden, kann dies mit den Funktionen sqlsrv_prepare()
und sqlsrv_execute()
wie sqlsrv_execute()
werden:
$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));
}
}
Abfrageergebnisse abrufen
Es gibt drei Hauptmethoden zum Abrufen von Ergebnissen aus einer Abfrage:
sqlsrv_fetch_array ()
sqlsrv_fetch_array()
ruft die nächste Zeile als Array ab.
$stmt = sqlsrv_query($conn, $query);
while($row = sqlsrv_fetch_array($stmt)) {
echo $row[0];
$var = $row["name"];
//...
}
sqlsrv_fetch_array()
hat einen optionalen zweiten Parameter zum Abrufen verschiedener Array-Typen: SQLSRV_FETCH_ASSOC
, SQLSRV_FETCH_NUMERIC
und SQLSRV_FETCH_BOTH
(Standard) können verwendet werden; Jede gibt die assoziativen, numerischen bzw. assoziativen und numerischen Arrays zurück.
sqlsrv_fetch_object ()
sqlsrv_fetch_object()
ruft die nächste Zeile als Objekt ab.
$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()
macht die nächste Zeile zum Lesen verfügbar.
$stmt = sqlsrv_query($conn, $query);
while(sqlsrv_fetch($stmt) === true) {
$foo = sqlsrv_get_field($stmt, 0); //gets the first field -
}
Fehlermeldungen abrufen
Wenn eine Abfrage fehlschlägt, ist es wichtig, die vom Treiber zurückgegebenen Fehlermeldungen abzurufen, um die Ursache des Problems zu ermitteln. Die Syntax lautet:
sqlsrv_errors([int $errorsOrWarnings]);
Dies liefert ein Array mit:
Schlüssel | Beschreibung |
---|---|
SQLSTATE | Der Status, in dem sich der SQL Server / OBDC-Treiber befindet |
Code | Der SQL Server-Fehlercode |
Botschaft | Die Beschreibung des Fehlers |
Es ist üblich, die obige Funktion wie folgt zu verwenden:
$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 />";
}
}
}