PHP
Använda SQLSRV
Sök…
Anmärkningar
SQLSRV-drivrutinen är en Microsoft-stödd PHP-förlängning som gör att du kan komma åt Microsoft SQL Server- och SQL Azure-databaser. Det är ett alternativ för MSSQL-drivrutinerna som avskrivs från och med PHP 5.3 och har tagits bort från PHP 7.
SQLSRV-förlängningen kan användas på följande operativsystem:
- Windows Vista Service Pack 2 eller senare
- Windows Server 2008 Service Pack 2 eller senare
- Windows Server 2008 R2
- Windows 7
SQLSRV-förlängningen kräver att Microsoft SQL Server 2012 Native Client installeras på samma dator som kör PHP. Om Microsoft SQL Server 2012 Native Client inte redan är installerad klickar du på lämplig länk på dokumentationssidan "Krav" .
Gå till följande för att ladda ner de senaste SQLSRV-drivrutinerna: Ladda ner
En fullständig lista över systemkrav för SQLSRV-drivrutiner kan hittas här: Systemkrav
De som använder SQLSRV 3.1+ måste ladda ner Microsoft ODBC Driver 11 för SQL Server
PHP7-användare kan ladda ner de senaste drivrutinerna från GitHub
Microsoft® ODBC Driver 13 för SQL Server stöder Microsoft SQL Server 2008, SQL Server 2008 R2, SQL Server 2012, SQL Server 2014, SQL Server 2016 (Preview), Analytics Platform System, Azure SQL Database och Azure SQL Data Warehouse.
Skapa en anslutning
$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 har också en PDO-drivrutin. För att ansluta med PDO:
$conn = new PDO("sqlsrv:Server=localhost,1234;Database=db001", $dbUser, $dbPassword);
Gör en enkel fråga
//Create Connection
$conn = sqlsrv_connect($dbServer, $connectionInfo);
$query = "SELECT * FROM [table]";
$stmt = sqlsrv_query($conn, $query);
Obs! Användningen av fyrkantiga parenteser []
är att undkomma table
eftersom det är ett reserverat ord . Dessa fungerar på samma sätt som backticks `
gör i MySQL .
Åkalla en lagrad procedur
Så här ringer du en lagrad procedur på servern:
$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);
Göra en parametriserad fråga
$conn = sqlsrv_connect($dbServer, $connectionInfo);
$query = "SELECT * FROM [users] WHERE [name] = ? AND [password] = ?";
$params = array("joebloggs", "pa55w0rd");
$stmt = sqlsrv_query($conn, $query, $params);
Om du planerar att använda samma frågeställning mer än en gång med olika parametrar kan samma uppnås med sqlsrv_prepare()
och sqlsrv_execute()
, som visas nedan:
$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));
}
}
Hämtar frågeställningar
Det finns tre huvudsakliga sätt att hämta resultat från en fråga:
sqlsrv_fetch_array ()
sqlsrv_fetch_array()
hämtar nästa rad som en matris.
$stmt = sqlsrv_query($conn, $query);
while($row = sqlsrv_fetch_array($stmt)) {
echo $row[0];
$var = $row["name"];
//...
}
sqlsrv_fetch_array()
har en valfri andra parameter för att hämta olika typer av array: SQLSRV_FETCH_ASSOC
, SQLSRV_FETCH_NUMERIC
och SQLSRV_FETCH_BOTH
(standard) kan användas; vardera returnerar de associativa, numeriska respektive assosiativa matriserna respektive.
sqlsrv_fetch_object ()
sqlsrv_fetch_object()
hämtar nästa rad som ett objekt.
$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()
gör nästa rad tillgänglig för läsning.
$stmt = sqlsrv_query($conn, $query);
while(sqlsrv_fetch($stmt) === true) {
$foo = sqlsrv_get_field($stmt, 0); //gets the first field -
}
Hämtar felmeddelanden
När en fråga går fel är det viktigt att hämta felmeddelanden som returneras av föraren för att identifiera orsaken till problemet. Syntaxen är:
sqlsrv_errors([int $errorsOrWarnings]);
Detta returnerar en matris med:
Nyckel | Beskrivning |
---|---|
SQLSTATE | Tillståndet som SQL Server / OBDC-drivrutinen är i |
koda | SQL Server-felkoden |
meddelande | Beskrivningen av felet |
Det är vanligt att använda ovanstående funktion så:
$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 />";
}
}
}