sqlsrv_query
Подготавливает и выполняет инструкцию.
Синтаксис
sqlsrv_query(resource $conn, string $tsql [, array $params [, array $options]])
Параметры
$conn: ресурс подключения, связанный с подготовленной инструкцией.
$tsql: выражение Transact-SQL, соответствующее подготовленной инструкции.
$params (необязательно): массив значений, которые соответствуют параметрам в параметризованном запросе. Каждый элемент массива может быть одним из следующих значений:
Буквенное значение.
Переменная PHP.
Массив со следующей структурой:
array($value [, $direction [, $phpType [, $sqlType]]])
Описание для каждого элемента массива приводится в следующей таблице:
Элемент Description $value Буквенное значение, переменная PHP или ссылочная переменная PHP. $direction(необязательно) Одна из следующих констант SQLSRV_PARAM_*, используемая для указания направления параметра: SQLSRV_PARAM_IN, SQLSRV_PARAM_OUT, SQLSRV_PARAM_INOUT. Значение по умолчанию — SQLSRV_PARAM_IN.
Дополнительные сведения о константах PHP см. в статье Константы (Драйверы Microsoft SQL Server для PHP).$phpType(необязательно) Константа SQLSRV_PHPTYPE_*, указывающая тип данных PHP для возвращаемого значения.
Дополнительные сведения о константах PHP см. в статье Константы (Драйверы Microsoft SQL Server для PHP).$sqlType(необязательно) Константа SQLSRV_SQLTYPE_*, указывающая тип данных SQL Server для входного значения.
Дополнительные сведения о константах PHP см. в статье Константы (Драйверы Microsoft SQL Server для PHP).
$options (НЕОБЯЗАТЕЛЬНО): ассоциативный массив, который задает свойства запроса. Это тот же список ключей, который поддерживается sqlsrv_prepare.
Возвращаемое значение
Ресурс инструкции. Если не удается создать или выполнить инструкцию, возвращается значение false.
Замечания
Функция sqlsrv_query хорошо подходит для одноразовых запросов и должна использоваться по умолчанию для выполнения запросов, если только не действуют особые обстоятельства. Эта функция предоставляет оптимальный метод для выполнения запроса с использованием минимального количества кода. Функция sqlsrv_query подготавливает и выполняет инструкцию, а также может применяться для выполнения параметризованных запросов.
Дополнительные сведения см. в статье Практическое руководство. Извлечение параметров вывода с помощью драйвера SQLSRV.
Пример 1
В следующем примере отдельная строка вставляется в таблицу Sales.SalesOrderDetail базы данных AdventureWorks. В примере предполагается, что SQL Server и базы данных AdventureWorks установлены на локальном компьютере. При выполнении примера из командной строки все выходные данные выводятся в консоль.
Примечание.
Хотя в следующем примере используется инструкция INSERT, чтобы продемонстрировать использование sqlsrv_query для однократного выполнения инструкции, эта концепция распространяется на любую инструкцию Transact-SQL.
<?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);
?>
Пример 2
В приведенном ниже примере обновляется поле в таблице Sales.SalesOrderDetail базы данных AdventureWorks. В примере предполагается, что SQL Server и базы данных AdventureWorks установлены на локальном компьютере. При выполнении примера из командной строки все выходные данные выводятся в консоль.
<?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);
?>
Примечание.
Рекомендуется использовать строки в качестве входных данных при привязке значений к десятичным или числовым столбцам, чтобы обеспечить точность и правильность, поскольку PHP имеет ограниченную точность для чисел с плавающей запятой. То же касается и столбцов bigint, особенно в том случае, если значения выходят за пределы диапазона целых чисел.
Пример 3
В этом примере кода показано, как привязать десятичное значение в качестве входного параметра.
<?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);
?>
Пример 4
В этом примере кода показано, как создать таблицу типов sql_variant и получить внесенные данные.
<?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);
?>
Ожидаемый результат будет следующим.
First field: 1
Second field: test_data
См. также
Справочник по API для драйвера SQLSRV
Практическое руководство. Выполнение параметризованных запросов
Информация о примерах кода в документации