Ricerca…


Osservazioni

Il driver SQLSRV è un'estensione PHP supportata da Microsoft che consente di accedere ai database Microsoft SQL Server e SQL Azure. È un'alternativa per i driver MSSQL che sono stati deprecati a partire da PHP 5.3 e sono stati rimossi da PHP 7.


L'estensione SQLSRV può essere utilizzata sui seguenti sistemi operativi:

  • Windows Vista Service Pack 2 o successivo
  • Windows Server 2008 Service Pack 2 o successivo
  • Windows Server 2008 R2
  • Windows 7

L'estensione SQLSRV richiede che il client nativo di Microsoft SQL Server 2012 sia installato nello stesso computer su cui è in esecuzione PHP. Se il client nativo di Microsoft SQL Server 2012 non è già installato, fare clic sul collegamento appropriato nella pagina di documentazione "Requisiti" .


Per scaricare i driver SQLSRV più recenti, andare al seguente: Download

Un elenco completo dei requisiti di sistema per i driver SQLSRV può essere trovato qui: Requisiti di sistema

Chi utilizza SQLSRV 3.1+ deve scaricare il driver Microsoft ODBC 11 per SQL Server

Gli utenti di PHP7 possono scaricare i driver più recenti da GitHub

Microsoft® ODBC Driver 13 per SQL Server supporta Microsoft SQL Server 2008, SQL Server 2008 R2, SQL Server 2012, SQL Server 2014, SQL Server 2016 (Anteprima), Sistema piattaforma di analisi, Database SQL di Azure e Data Warehouse SQL di Azure.

Creare una connessione

$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 ha anche un driver PDO. Per connetterti usando PDO:

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

Fare una domanda semplice

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

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

Nota: l'uso delle parentesi quadre [] è di sfuggire alla table parole in quanto è una parola riservata . Funzionano allo stesso modo dei backtick ` do in MySQL .

Richiamo di una stored procedure

Per chiamare una procedura memorizzata sul server:

$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);

Esecuzione di una query con parametri

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

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

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

Se si prevede di utilizzare la stessa istruzione di query più di una volta, con parametri diversi, è possibile ottenere lo stesso con le sqlsrv_prepare() e sqlsrv_execute() , come illustrato di seguito:

$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));
    }
}

Recupero dei risultati di una query

Esistono 3 modi principali per recuperare i risultati da una query:

sqlsrv_fetch_array ()

sqlsrv_fetch_array() recupera la riga successiva come una matrice.

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

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

sqlsrv_fetch_array() ha un secondo parametro opzionale per recuperare diversi tipi di array: SQLSRV_FETCH_ASSOC , SQLSRV_FETCH_NUMERIC e SQLSRV_FETCH_BOTH (predefinito) possono essere utilizzati; ognuno restituisce rispettivamente gli array associativi, numerici o associativi e numerici.


sqlsrv_fetch_object ()

sqlsrv_fetch_object() recupera la riga successiva come oggetto.

$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() rende disponibile per la lettura la riga successiva.

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

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

Recupero messaggi di errore

Quando una query non funziona, è importante recuperare i messaggi di errore restituiti dal driver per identificare la causa del problema. La sintassi è:

sqlsrv_errors([int $errorsOrWarnings]);

Questo restituisce un array con:

Chiave Descrizione
SQLSTATE Lo stato in cui si trova il driver SQL Server / OBDC
codice Il codice di errore di SQL Server
Messaggio La descrizione dell'errore

È comune usare la funzione sopra in questo modo:

$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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow