Compartilhar via


sqlsrv_query

Baixar o driver PHP

Prepara e executa uma instrução.

Sintaxe

  
sqlsrv_query(resource $conn, string $tsql [, array $params [, array $options]])  

Parâmetros

$conn: o recurso de conexão associado à instrução preparada.

$tsql: a expressão Transact-SQL que corresponde à instrução preparada.

$params [OPTIONAL]: uma matriz de valores que correspondem aos parâmetros em uma consulta parametrizada. Cada elemento da matriz pode ser um dos seguintes:

  • Um valor literal.

  • Uma variável do PHP.

  • Uma matriz com a seguinte estrutura:

    array($value [, $direction [, $phpType [, $sqlType]]])  
    

    A descrição de cada elemento da matriz está na tabela a seguir:

    Elemento Descrição
    $value Um valor literal, uma variável do PHP ou uma variável do PHP por referência.
    $direction[OPCIONAL] Uma destas constantes SQLSRV_PARAM_* é usada para indicar a direção do parâmetro: SQLSRV_PARAM_IN, SQLSRV_PARAM_OUT, SQLSRV_PARAM_INOUT. O valor padrão é SQLSRV_PARAM_IN.

    Para obter mais informações sobre constantes do PHP, confira Constantes (Drivers da Microsoft para PHP para SQL Server).
    $phpType[OPCIONAL] Uma constante SQLSRV_PHPTYPE_* que especifica o tipo de dados PHP do valor retornado.

    Para obter mais informações sobre constantes do PHP, confira Constantes (Drivers da Microsoft para PHP para SQL Server).
    $sqlType[OPCIONAL] Uma constante SQLSRV_SQLTYPE_* que especifica o tipo de dados do SQL Server do valor de entrada.

    Para obter mais informações sobre constantes do PHP, confira Constantes (Drivers da Microsoft para PHP para SQL Server).

$options [OPTIONAL]: uma matriz associativa que define as propriedades da consulta. É a mesma lista de chaves às quais o sqlsrv_prepare também dá suporte.

Valor retornado

Um recurso de instrução. Se não for possível criar e/ou executar a instrução, false será retornado.

Comentários

A função sqlsrv_query é adequada para consultas únicas e deve ser a opção padrão para executar consultas, a menos que circunstâncias especiais se apliquem. Essa função fornece um método simplificado para executar uma consulta com uma quantidade mínima de código. A função sqlsrv_query realiza a preparação e a execução da instrução e pode ser usada para executar consultas parametrizadas.

Para obter mais informações, confira Como recuperar parâmetros de saída usando o driver SQLSRV.

Exemplo 1

No exemplo a seguir, uma única linha é inserida na tabela Sales.SalesOrderDetail do banco de dados AdventureWorks. O exemplo supõe que o SQL Server e o banco de dados AdventureWorks estejam instalados no computador local. Toda a saída será gravada no console quando o exemplo for executado da linha de comando.

Observação

Embora o exemplo a seguir use uma instrução INSERT para demonstrar o uso de sqlsrv_query para a execução de uma instrução única, o conceito se aplica a qualquer instrução 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);  
?>  

Exemplo 2

O exemplo a seguir atualiza um campo na tabela Sales.SalesOrderDetail do banco de dados AdventureWorks. O exemplo supõe que o SQL Server e o banco de dados AdventureWorks estejam instalados no computador local. Toda a saída será gravada no console quando o exemplo for executado da linha de comando.

<?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);  
?>  

Observação

É recomendável usar cadeias de caracteres como entradas ao associar valores a uma coluna decimal ou numérica a fim de garantir a precisão e a exatidão, pois o PHP tem uma precisão limitada para números de ponto flutuante. O mesmo se aplica a colunas bigint, principalmente quando os valores estão fora do intervalo de um inteiro.

Exemplo 3

Este exemplo de código mostra como associar um valor decimal como um parâmetro de entrada.

<?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);  

?>

Exemplo 4

Este exemplo de código mostra como criar uma tabela de tipos sql_variant tipos e buscar os dados inseridos.

<?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);

?>

A saída esperada seria:

First field:  1
Second field:  test_data

Consulte Também

Referência da API do driver SQLSRV

Como: Executar consultas parametrizadas

Sobre exemplos de código na documentação

Como: Enviar dados como um fluxo

Usando parâmetros direcionais