Zoeken…


Opmerkingen

Het SQLSRV-stuurprogramma is een door Microsoft ondersteunde PHP-extensie waarmee u toegang hebt tot Microsoft SQL Server- en SQL Azure-databases. Het is een alternatief voor de MSSQL-stuurprogramma's die zijn verouderd vanaf PHP 5.3 en zijn verwijderd uit PHP 7.


De SQLSRV-extensie kan worden gebruikt op de volgende besturingssystemen:

  • Windows Vista Service Pack 2 of hoger
  • Windows Server 2008 Service Pack 2 of hoger
  • Windows Server 2008 R2
  • Windows 7

De SQLSRV-extensie vereist dat de Microsoft SQL Server 2012 Native Client wordt geïnstalleerd op dezelfde computer waarop PHP wordt uitgevoerd. Als Microsoft Native Client 2012 nog niet is geïnstalleerd, klikt u op de juiste koppeling op de documentatiepagina "Vereisten" .


Ga naar het volgende om de nieuwste SQLSRV-stuurprogramma's te downloaden: Downloaden

Een volledige lijst met systeemvereisten voor de SQLSRV-stuurprogramma's vindt u hier: Systeemvereisten

Degenen die SQLSRV 3.1+ gebruiken, moeten het Microsoft ODBC-stuurprogramma 11 voor SQL Server downloaden

PHP7-gebruikers kunnen de nieuwste stuurprogramma's downloaden van GitHub

Microsoft® ODBC Driver 13 voor SQL Server ondersteunt Microsoft SQL Server 2008, SQL Server 2008 R2, SQL Server 2012, SQL Server 2014, SQL Server 2016 (Preview), Analytics Platform System, Azure SQL Database en Azure SQL Data Warehouse.

Verbinding maken

$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 heeft ook een PDO-stuurprogramma. Verbinding maken via PDO:

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

Een eenvoudige vraag maken

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

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

Opmerking: het gebruik van vierkante haakjes [] is om te ontsnappen woord table omdat het een gereserveerd woord . Deze werken op dezelfde manier als backticks ` doen in MySQL .

Een opgeslagen procedure oproepen

Een opgeslagen procedure op de server oproepen:

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

Een geparametriseerde query maken

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

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

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

Als u van plan bent om dezelfde query-instructie meer dan eens te gebruiken, met verschillende parameters, kan hetzelfde worden bereikt met de sqlsrv_prepare() en sqlsrv_execute() , zoals hieronder weergegeven:

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

Zoekopdrachtresultaten ophalen

Er zijn 3 manieren om resultaten van een zoekopdracht op te halen:

sqlsrv_fetch_array ()

sqlsrv_fetch_array() haalt de volgende rij op als een array.

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

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

sqlsrv_fetch_array() heeft een optionele tweede parameter om verschillende typen array op te halen: SQLSRV_FETCH_ASSOC , SQLSRV_FETCH_NUMERIC en SQLSRV_FETCH_BOTH (standaard) kunnen worden gebruikt; elk retourneert respectievelijk de associatieve, numerieke of associatieve en numerieke arrays.


sqlsrv_fetch_object ()

sqlsrv_fetch_object() haalt de volgende rij op als een object.

$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() maakt de volgende rij beschikbaar om te lezen.

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

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

Foutmeldingen ophalen

Wanneer een vraag fout gaat, is het belangrijk om de door de bestuurder teruggezonden foutmeldingen op te halen om de oorzaak van het probleem te achterhalen. De syntaxis is:

sqlsrv_errors([int $errorsOrWarnings]);

Dit retourneert een array met:

Sleutel Beschrijving
SQLSTATE De status waarin het SQL Server / OBDC-stuurprogramma zich bevindt
code De SQL Server-foutcode
bericht De beschrijving van de fout

Het is gebruikelijk om de bovenstaande functie als volgt te gebruiken:

$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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow