Compartir a través de


sqlsrv_prepare

Crea un recurso de la instrucción asociado con la conexión especificada.

Nota

Esta función es ideal cuando se ejecutan varias consultas. Para obtener más información, vea Cómo ejecutar una consulta varias veces.

Sintaxis

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

Parámetros

$conn: el recurso de conexión asociado con la instrucción creada.

$tsql: la expresión de Transact-SQL que corresponde a la instrucción creada.

$params [OPCIONAL]: una matriz (array) de valores que se corresponden con los parámetros de una consulta con parámetros. Los elementos de la matriz pueden ser cualquiera de los siguientes:

  • Un valor literal.

  • Una referencia a una variable PHP.

  • Una matriz (array) con la estructura siguiente:

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

    Nota

    Las variables que se pasan como parámetros de consulta se deben pasar por referencia en lugar de por valor. Por ejemplo, pase &$myVariable en lugar de $myVariable. PHP mostrará una advertencia cuando se ejecute una consulta con parámetros por valor.

    En la siguiente tabla se describen estos elementos de la matriz:

    Elemento Descripción

    &$value

    Un valor literal o una referencia a una variable de PHP.

    $direction[OPCIONAL]

    Una de las siguientes constantes de SQLSRV_PARAM_* se usan para indicar la dirección del parámetro: SQLSRV_PARAM_IN, SQLSRV_PARAM_OUT, SQLSRV_PARAM_INOUT. El valor predeterminado es SQLSRV_PARAM_IN.

    $phpType[OPCIONAL]

    Una constante SQLSRV_PHPTYPE_* que especifica el tipo de datos de PHP del valor devuelto.

    $sqlType[OPCIONAL]

    Una constante SQLSRV_SQLTYPE_* que especifica el tipo de datos de SQL Server del valor de entrada.

$options [OPCIONAL]: una matriz asociativa que establece las propiedades de la consulta. En la siguiente tabla se muestran las claves y sus correspondientes valores admitidos:

Clave Valores admitidos Descripción

QueryTimeout

Un valor entero positivo.

Establece el tiempo de espera de la consulta en segundos. De forma predeterminada, el controlador esperará indefinidamente los resultados.

SendStreamParamsAtExec

true o false

El valor predeterminado es true.

Configura el controlador para que envíe todos los datos en secuencias en el momento de la ejecución (true) o para que envíe los datos en secuencias en fragmentos (false). De forma predeterminada, el valor está establecido en true. Para obtener más información, vea sqlsrv_send_stream_data.

De desplazamiento

SQLSRV_CURSOR_FORWARD

SQLSRV_CURSOR_STATIC

SQLSRV_CURSOR_DYNAMIC

SQLSRV_CURSOR_KEYSET

Esta clave se ha agregado en la versión 1.1 del Controlador de SQL Server para PHP.

Para obtener más información acerca de estos valores, vea Especificar un tipo de cursor y seleccionar filas.

Valor devuelto

Un recurso de instrucción. Si no se puede crear el recurso de instrucción, se devuelve false.

Ejemplo

En el siguiente ejemplo se prepara y se ejecuta una instrucción. Cuando se ejecuta la instrucción (vea sqlsrv_execute), se actualiza un campo de la tabla Sales.SalesOrderDetail de la base de datos AdventureWorks. En el ejemplo se supone que SQL Server y la base de datos AdventureWorks están instalados en el equipo local. Cuando se ejecuta el ejemplo desde la línea de comandos, todos los resultados se escriben en la consola.

<?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 Transact-SQL query. */
$tsql = "UPDATE Sales.SalesOrderDetail 
         SET OrderQty = ? 
         WHERE SalesOrderDetailID = ?";

/* Assign parameter values. */
$param1 = 5;
$param2 = 10;
$params = array( &$param1, &$param2);

/* Prepare the statement. */
if( $stmt = sqlsrv_prepare( $conn, $tsql, $params))
{
      echo "Statement prepared.\n";
} 
else
{
      echo "Statement could not be prepared.\n";
      die( print_r( sqlsrv_errors(), true));
}

/* Execute the statement. */
if( sqlsrv_execute( $stmt))
{
      echo "Statement executed.\n";
}
else
{
      echo "Statement could not be executed.\n";
      die( print_r( sqlsrv_errors(), true));
}

/* Free the statement and connection resources. */
sqlsrv_free_stmt( $stmt);
sqlsrv_close( $conn);
?>

Vea también

Tareas

Cómo realizar consultas parametrizadas
Cómo enviar datos como una secuencia

Conceptos

Acerca de ejemplos de código en la documentación

Otros recursos

Referencia de la API (Controlador SQL Server para PHP)
Consideraciones de diseño
Usar parámetros de direcciones