Поделиться через


sqlsrv_query

Скачать драйвер PHP

Подготавливает и выполняет инструкцию.

Синтаксис

  
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

Практическое руководство. Выполнение параметризованных запросов

Информация о примерах кода в документации

Практическое руководство. Отправка данных в виде потока

Использование параметров направления