sqlsrv_query
Prepara y ejecuta una instrucción.
Sintaxis
sqlsrv_query(resource $conn, string $tsql [, array $params [, array $options]])
Parámetros
$conn: el recurso de conexión asociado a la instrucción preparada.
$tsql: la expresión Transact-SQL que corresponde a la instrucción preparada.
$params [OPCIONAL]: matriz de valores que se corresponden con parámetros de una consulta con parámetros. Cada elemento de la matriz puede ser uno de los siguientes:
Un valor literal
Una variable PHP
Una matriz con la siguiente estructura:
array($value [, $direction [, $phpType [, $sqlType]]])
En la siguiente tabla se incluye la descripción de cada elemento de la matriz:
Elemento Descripción $value Un valor literal, una variable PHP o una variable por referencia PHP. $direction[OPCIONAL] Una de las siguientes constantes SQLSRV_PARAM_* usadas para indicar la dirección del parámetro: SQLSRV_PARAM_IN, SQLSRV_PARAM_OUT, SQLSRV_PARAM_INOUT. El valor predeterminado es SQLSRV_PARAM_IN.
Para obtener más información sobre las constantes de PHP, vea Constantes (controladores de Microsoft para PHP para SQL Server).$phpType[OPCIONAL] Constante SQLSRV_PHPTYPE_* que especifica el tipo de datos PHP del valor devuelto.
Para obtener más información sobre las constantes de PHP, vea Constantes (controladores de Microsoft para PHP para SQL Server).$sqlType[OPCIONAL] Constante SQLSRV_SQLTYPE_* que especifica el tipo de datos de SQL Server del valor de entrada.
Para obtener más información sobre las constantes de PHP, vea Constantes (controladores de Microsoft para PHP para SQL Server).
$options [OPCIONAL]: una matriz asociativa que establece propiedades de consultas. Es la misma lista de claves que también admite sqlsrv_prepare.
Valor devuelto
Un recurso de instrucción. Si no se puede crear o ejecutar la instrucción, se devuelve false.
Observaciones
La función sqlsrv_query resulta apropiada para consultas únicas y debe establecerse como la opción predeterminada para ejecutar consultas, a menos que se apliquen circunstancias especiales. Esta función proporciona un método simplificado para ejecutar una consulta con una cantidad mínima de código. La función sqlsrv_query realiza los procesos de preparación y ejecución de la instrucción, y se puede usar para ejecutar consultas con parámetros.
Para más información, vea: Cómo: Recuperación de los parámetros de salida con el controlador SQLSRV.
Ejemplo 1
En el siguiente ejemplo, se inserta una fila única en la tabla Sales.SalesOrderDetail de la base de datos de AdventureWorks. En el 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.
Nota:
Aunque en el ejemplo siguiente se usa una instrucción INSERT con el objetivo de mostrar el uso de sqlsrv_query para la ejecución de una instrucción única, el concepto se aplica a cualquier instrucción de 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);
?>
Ejemplo 2
En el siguiente ejemplo se actualiza un campo de la tabla Sales.SalesOrderDetail de la base de datos AdventureWorks. En el 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));
}
/* 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);
?>
Nota
Se recomienda utilizar cadenas como entradas cuando se vinculen valores a una columna decimal o numérica para garantizar la precisión y la exactitud, ya que PHP tiene una precisión limitada para números de punto flotante. Lo mismo se aplica a las columnas de tipo bigint, especialmente cuando los valores están fuera del intervalo de un entero.
Ejemplo 3
Este ejemplo de código muestra cómo enlazar un valor decimal como un 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);
?>
Ejemplo 4
Este ejemplo de código muestra cómo crear una tabla de tipos sql_variant y capturar los datos insertados.
<?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);
?>
El resultado esperado sería:
First field: 1
Second field: test_data
Consulte también
Referencia de API del controlador SQLSRV
Cómo: Realización de consultas con parámetros
Sobre los ejemplos de código de la documentación