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


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow