Compartir a través de


Procedimientos: Especificación de los tipos de datos de SQL Server cuando se utiliza el controlador SQLSRV

Descargar controlador PHP

En este tema se muestra cómo usar el controlador SQLSRV para especificar el tipo de datos de SQL Server para los datos que se envían al servidor. Este tema no se aplica cuando se utiliza el controlador PDO_SQLSRV.

Para especificar el tipo de datos de SQL Server, debe usar la matriz $params opcional al preparar o ejecutar una consulta que inserta o actualiza datos. Para obtener información más detallada sobre la estructura y la sintaxis de la matriz $params , consulte sqlsrv_query o sqlsrv_prepare.

En los pasos siguientes se resume cómo especificar el tipo de datos de SQL Server al enviar datos al servidor:

Nota

Si no se especifica ningún tipo de datos de SQL Server, se usan tipos predeterminados. Para obtener información sobre todos los tipos de datos SQL Server, consulte Default SQL Server Data Types.

  1. Defina una consulta de Transact-SQL que inserta o actualiza datos. Utilice signos de interrogación (?) como marcadores de posición para los valores de parámetro de la consulta.

  2. Inicialice o actualice las variables PHP de los marcadores de posición en la consulta de Transact-SQL.

  3. Cree la matriz $params que se utilizará al preparar o ejecutar la consulta. Tenga en cuenta que cada elemento de la matriz $params también debe ser una matriz cuando se especifica el tipo de datos de SQL Server.

  4. Especifique el tipo de datos de SQL Server deseado mediante la constante SQLSRV_SQLTYPE_* adecuada como cuarto parámetro de cada submatriz de la matriz $params. Para obtener una lista completa de las constantes SQLSRV_SQLTYPE_*, vea la sección SQLTYPE de Constantes (controladores de Microsoft para PHP para SQL Server). Por ejemplo, en el código siguiente, $changeDate, $ratey $payFrequency se especifican respectivamente como los tipos de datos de SQL Server datetime, dineroy tinyint en la matriz $params . Como no se especifica ningún tipo de datos de SQL Server para $employeeId y se inicializa en un valor entero, se utiliza el tipo de SQL Server predeterminado 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)  
              );  
    

Ejemplo

En el ejemplo siguiente se insertan datos en la tabla HumanResources.EmployeePayHistory de la base de datos AdventureWorks. Se especifican tipos de datos de SQL Server para los parámetros $changeDate, $ratey $payFrequency . El tipo de datos de SQL Server predeterminado se utiliza para el parámetro $employeeId . Para comprobar que los datos se han insertado correctamente, se recuperan y muestran los mismos datos.

En este ejemplo se da por hecho que SQL Server y la base de datos AdventureWorks están instalados en el equipo local. Los resultados se agregan a la consola cuando se ejecuta el ejemplo en la línea de comandos.

<?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 también

Recuperación de datos

Sobre los ejemplos de código de la documentación

Procedimientos: Especificación de los tipos de datos PHP

Conversión de tipos de datos

Procedimientos: Envío y recuperación de datos UTF-8 gracias a la compatibilidad integrada con UTF-8