sqlsrv_query
Bereitet eine Anweisung vor und führt diese aus.
Syntax
sqlsrv_query(resource $conn, string $tsql [, array $params [, array $options]])
Parameter
$conn: Die der vorbereiteten Anweisung zugeordnete Verbindungsressource.
$tsql: Der Transact-SQL-Ausdruck, der der vorbereiteten Anweisung entspricht.
$params [OPTIONAL]: Hierbei handelt es sich um ein Array von Werten, die Parametern in einer parametrisierten Abfrage entsprechen. Jedes Element des Arrays kann eines der folgenden sein:
Ein Literalwert
Eine PHP-Variable.
Ein Array mit der folgenden Struktur:
array($value [, $direction [, $phpType [, $sqlType]]])
Die Beschreibung für jedes Element des Arrays finden Sie in der folgenden Tabelle:
Element Beschreibung $value Ein Literalwert, eine PHP-Variable oder eine PHP-Variable als Verweis. $direction[OPTIONAL] Eine der folgenden verwendeten SQLSRV_PARAM_*-Konstanten, um die Parameterrichtung anzugeben: SQLSRV_PARAM_IN, SQLSRV_PARAM_OUT, SQLSRV_PARAM_INOUT. Der Standardwert ist SQLSRV_PARAM_IN.
Weitere Informationen zu PHP-Konstanten finden Sie unter Konstanten (Microsoft-Treiber für PHP für SQL Server).$phpType[OPTIONAL] Eine SQLSRV_PHPTYPE_*-Konstante, die den PHP-Datentyp des Rückgabewerts angibt.
Weitere Informationen zu PHP-Konstanten finden Sie unter Konstanten (Microsoft-Treiber für PHP für SQL Server).$sqlType[OPTIONAL] Eine SQLSRV_SQLTYPE_*-Konstante, die den SQL Server-Datentyp des Eingabewerts angibt.
Weitere Informationen zu PHP-Konstanten finden Sie unter Konstanten (Microsoft-Treiber für PHP für SQL Server).
$options [OPTIONAL]: Hierbei handelt es sich um ein assoziatives Array, das Abfrageeigenschaften festlegt. Es handelt sich um die gleiche Liste von Schlüsseln, die auch Sqlsrv_prepare unterstützt.
Rückgabewert
Eine Anweisungsressource. Wenn die Anweisung nicht erstellt und/oder ausgeführt werden kann, wird FALSE zurückgegeben.
Bemerkungen
Die sqlsrv_query-Funktion eignet sich ideal für einmalige Abfragen und sollte auch die Standardauswahl sein, um Abfragen auszuführen, es sei denn, es gelten besondere Umstände. Diese Funktion bietet eine optimierte Methode zum Ausführen einer Abfrage mit einem Minimum von Codes. Die sqlsrv_query -Funktion führt jeweils eine Anweisungsvorbereitung und eine Anweisungsausführung durch und kann verwendet werden, um parametrisierte Abfragen auszuführen.
Weitere Informationen finden Sie unter Vorgehensweise: Abrufen von Ausgabeparametern mit dem SQLSRV-Treiber.
Beispiel 1
Im folgenden Beispiel wird eine einzelne Zeile in die Sales.SalesOrderDetail -Tabelle der AdventureWorks-Datenbank eingefügt. Das Beispiel setzt voraus, dass SQL Server und die AdventureWorks-Datenbank auf dem lokalen Computer installiert sind. Wenn das Beispiel über die Befehlszeile ausgeführt wird, werden alle Ausgaben in die Konsole geschrieben.
Hinweis
Obwohl folgendes Beispiel eine INSERT-Anweisung verwendet, um die Verwendung von sqlsrv_query für einmaliges Ausführen einer Anweisung zu demonstrieren, gilt das Konzept für jede Transact-SQL-Anweisung.
<?php
/* Connect to the local server using Windows Authentication and
specify the AdventureWorks database as the database in use. */
$serverName = "(local)";
$connectionInfo = array("Database"=>"AdventureWorks");
$conn = sqlsrv_connect($serverName, $connectionInfo);
if ($conn === false) {
echo "Could not connect.\n";
die(print_r(sqlsrv_errors(), true));
}
/* Set up the parameterized query. */
$tsql = "INSERT INTO Sales.SalesOrderDetail
(SalesOrderID,
OrderQty,
ProductID,
SpecialOfferID,
UnitPrice,
UnitPriceDiscount)
VALUES
(?, ?, ?, ?, ?, ?)";
/* Set parameter values. */
$params = array(75123, 5, 741, 1, 818.70, 0.00);
/* Prepare and execute the query. */
$stmt = sqlsrv_query($conn, $tsql, $params);
if ($stmt) {
echo "Row successfully inserted.\n";
} else {
echo "Row insertion failed.\n";
die(print_r(sqlsrv_errors(), true));
}
/* Free statement and connection resources. */
sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);
?>
Beispiel 2
Im folgenden Beispiel wird ein Feld in der Sales.SalesOrderDetail-Tabelle der AdventureWorks-Datenbank aktualisiert. Das Beispiel setzt voraus, dass SQL Server und die AdventureWorks-Datenbank auf dem lokalen Computer installiert sind. Wenn das Beispiel über die Befehlszeile ausgeführt wird, werden alle Ausgaben in die Konsole geschrieben.
<?php
/* Connect to the local server using Windows Authentication and
specify the AdventureWorks database as the database in use. */
$serverName = "(local)";
$connectionInfo = array("Database"=>"AdventureWorks");
$conn = sqlsrv_connect($serverName, $connectionInfo);
if ($conn === false) {
echo "Could not connect.\n";
die(print_r(sqlsrv_errors(), true));
}
/* Set up the parameterized query. */
$tsql = "UPDATE Sales.SalesOrderDetail
SET OrderQty = (?)
WHERE SalesOrderDetailID = (?)";
/* Assign literal parameter values. */
$params = array(5, 10);
/* Execute the query. */
if (sqlsrv_query($conn, $tsql, $params)) {
echo "Statement executed.\n";
} else {
echo "Error in statement execution.\n";
die(print_r(sqlsrv_errors(), true));
}
/* Free connection resources. */
sqlsrv_close($conn);
?>
Hinweis
Es wird empfohlen, beim Binden von Werten an eine Spalte des Datentyps „decimal“ oder „numeric“ Zeichenfolgen als Eingabe zu verwenden, um Präzision und Genauigkeit sicherzustellen, da die Genauigkeit von PHP für Gleitkommazahlen begrenzt ist. Dasselbe gilt für Spalten des Datentyps „bigint“, insbesondere, wenn die Werte außerhalb des Bereichs einer ganzen Zahl liegen.
Beispiel 3
In diesem Codebeispiel wird das Binden eines Dezimalwerts als Eingabeparameter veranschaulicht.
<?php
$serverName = "(local)";
$connectionInfo = array("Database"=>"YourTestDB");
$conn = sqlsrv_connect($serverName, $connectionInfo);
if ($conn === false) {
echo "Could not connect.\n";
die(print_r(sqlsrv_errors(), true));
}
// Assume TestTable exists with a decimal field
$input = "9223372036854.80000";
$params = array($input);
$stmt = sqlsrv_query($conn, "INSERT INTO TestTable (DecimalCol) VALUES (?)", $params);
sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);
?>
Beispiel 4
In diesem Codebeispiel wird das Erstellen einer Tabelle mit Werten des Datentyps sql_variant und das Abrufen der eingefügten Daten veranschaulicht.
<?php
$server = 'serverName';
$dbName = 'databaseName';
$uid = 'yourUserName';
$pwd = 'yourPassword';
$options = array("Database"=>$dbName, "UID"=>$uid, "PWD"=>$pwd);
$conn = sqlsrv_connect($server, $options);
if($conn === false) {
die(print_r(sqlsrv_errors(), true));
}
$tableName = 'testTable';
$query = "CREATE TABLE $tableName ([c1_int] sql_variant, [c2_varchar] sql_variant)";
$stmt = sqlsrv_query($conn, $query);
if($stmt === false) {
die(print_r(sqlsrv_errors(), true));
}
sqlsrv_free_stmt($stmt);
$query = "INSERT INTO [$tableName] (c1_int, c2_varchar) VALUES (1, 'test_data')";
$stmt = sqlsrv_query($conn, $query);
if($stmt === false) {
die(print_r(sqlsrv_errors(), true));
}
sqlsrv_free_stmt($stmt);
$query = "SELECT * FROM $tableName";
$stmt = sqlsrv_query($conn, $query);
if(sqlsrv_fetch($stmt) === false) {
die(print_r(sqlsrv_errors(), true));
}
$col1 = sqlsrv_get_field($stmt, 0);
echo "First field: $col1 \n";
$col2 = sqlsrv_get_field($stmt, 1);
echo "Second field: $col2 \n";
sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);
?>
Die erwartete Ausgabe sieht wie folgt aus:
First field: 1
Second field: test_data
Weitere Informationen
API-Referenz für den SQLSRV-Treiber
Vorgehensweise: Ausführen parametrisierter Abfragen
Informationen zu den Codebeispielen in der Dokumentation