Share via


Como especificar tipos de dados do SQL Server usando o Driver SQLSRV

Baixar driver PHP

Este tópico demonstra como usar o driver SQLSRV para especificar o tipo de dados do SQL Server para dados enviados ao servidor. Este tópico não se aplica ao usar o driver PDO_SQLSRV.

Para especificar o tipo de dados do SQL Server, você deve usar a matriz opcional $params ao preparar ou executar uma consulta que insere ou atualiza dados. Para obter detalhes sobre a estrutura e a sintaxe da matriz $params , consulte sqlsrv_query ou sqlsrv_prepare.

As etapas a seguir resumem como especificar o tipo de dados do SQL Server ao enviar dados para o servidor:

Observação

Se nenhum tipo de dados do SQL Server for especificado, serão usados os tipos padrão. Para obter informações sobre os tipos de dados padrão do SQL Server, consulte Default SQL Server Data Types.

  1. Defina uma consulta Transact-SQL que insere ou atualiza dados. Use pontos de interrogação (?) como espaços reservados para valores de parâmetro na consulta.

  2. Inicialize ou atualize as variáveis do PHP correspondentes aos espaços reservados na consulta Transact-SQL.

  3. Crie a matriz $params a ser usada na preparação ou na execução da consulta. Observe que, ao especificar o tipo de dados do SQL Server, cada elemento da matriz $params também deve ser uma matriz.

  4. Especifique o tipo de dados do SQL Server desejado usando a constante SQLSRV_SQLTYPE_* adequada como o quarto parâmetro em cada submatriz da matriz $params. Para obter uma lista completa das constantes SQLSRV_SQLTYPE_*, confira a seção SQLTYPEs de Constantes (Drivers da Microsoft para PHP para SQL Server). Por exemplo, no código a seguir, $changeDate, $ratee $payFrequency são especificados respectivamente com os tipos do SQL Server datetime, moneye tinyint na matriz $params . Como nenhum tipo do SQL Server é especificado para $employeeId , que é inicializado como um inteiro, é usado o tipo padrão do SQL Server integer .

    $employeeId = 5;  
    $changeDate = "2005-06-07";  
    $rate = 30;  
    $payFrequency = 2;  
    $params = array(  
                array($employeeId, null),  
                array($changeDate, null, null, SQLSRV_SQLTYPE_DATETIME),  
                array($rate, null, null, SQLSRV_SQLTYPE_MONEY),  
                array($payFrequency, null, null, SQLSRV_SQLTYPE_TINYINT)  
              );  
    

Exemplo

O exemplo a seguir insere dados na tabela HumanResources.EmployeePayHistory do banco de dados do AdventureWorks. Os tipos do SQL Server são especificados para os parâmetros $changeDate, $rate, e $payFrequency . O tipo padrão do SQL Server é usado para o parâmetro $employeeId . Para verificar se os dados foram inseridos com êxito, os mesmos dados são recuperados e exibidos.

Este 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));  
}  
  
/* Define the query. */  
$tsql1 = "INSERT INTO HumanResources.EmployeePayHistory (EmployeeID,  
                                                        RateChangeDate,  
                                                        Rate,  
                                                        PayFrequency)  
           VALUES (?, ?, ?, ?)";  
  
/* Construct the parameter array. */  
$employeeId = 5;  
$changeDate = "2005-06-07";  
$rate = 30;  
$payFrequency = 2;  
$params1 = array(  
               array($employeeId, null),  
               array($changeDate, null, null, SQLSRV_SQLTYPE_DATETIME),  
               array($rate, null, null, SQLSRV_SQLTYPE_MONEY),  
               array($payFrequency, null, null, SQLSRV_SQLTYPE_TINYINT)  
           );  
  
/* Execute the INSERT query. */  
$stmt1 = sqlsrv_query($conn, $tsql1, $params1);  
if( $stmt1 === false )  
{  
     echo "Error in execution of INSERT.\n";  
     die( print_r( sqlsrv_errors(), true));  
}  
  
/* Retrieve the newly inserted data. */  
/* Define the query. */  
$tsql2 = "SELECT EmployeeID, RateChangeDate, Rate, PayFrequency  
          FROM HumanResources.EmployeePayHistory  
          WHERE EmployeeID = ? AND RateChangeDate = ?";  
  
/* Construct the parameter array. */  
$params2 = array($employeeId, $changeDate);  
  
/*Execute the SELECT query. */  
$stmt2 = sqlsrv_query($conn, $tsql2, $params2);  
if( $stmt2 === false )  
{  
     echo "Error in execution of SELECT.\n";  
     die( print_r( sqlsrv_errors(), true));  
}  
  
/* Retrieve and display the results. */  
$row = sqlsrv_fetch_array( $stmt2 );  
if( $row === false )  
{  
     echo "Error in fetching data.\n";  
     die( print_r( sqlsrv_errors(), true));  
}  
echo "EmployeeID: ".$row['EmployeeID']."\n";  
echo "Change Date: ".date_format($row['RateChangeDate'], "Y-m-d")."\n";  
echo "Rate: ".$row['Rate']."\n";  
echo "PayFrequency: ".$row['PayFrequency']."\n";  
  
/* Free statement and connection resources. */  
sqlsrv_free_stmt($stmt1);  
sqlsrv_free_stmt($stmt2);  
sqlsrv_close($conn);  
?>  

Consulte Também

Recuperando dados

Sobre exemplos de código na documentação

Como especificar tipos de dados do PHP

Convertendo tipos de dados

Como fazer: Enviar e recuperar dados UTF-8 usando o suporte interno a UTF-8