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 />";
        }
    }
}