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