Buscar..


Observaciones

El controlador SQLSRV es una extensión de PHP compatible con Microsoft que le permite acceder a las bases de datos de Microsoft SQL Server y SQL Azure. Es una alternativa para los controladores MSSQL que estaban en desuso a partir de PHP 5.3 y se han eliminado de PHP 7.


La extensión SQLSRV se puede utilizar en los siguientes sistemas operativos:

  • Windows Vista Service Pack 2 o posterior
  • Windows Server 2008 Service Pack 2 o posterior
  • Windows Server 2008 R2
  • Windows 7

La extensión SQLSRV requiere que el cliente nativo de Microsoft SQL Server 2012 se instale en la misma computadora que ejecuta PHP. Si el cliente nativo de Microsoft SQL Server 2012 aún no está instalado, haga clic en el enlace correspondiente en la página de documentación de "Requisitos" .


Para descargar los últimos controladores SQLSRV, vaya a lo siguiente: Descargar

Una lista completa de los requisitos del sistema para los controladores de SQLSRV se puede encontrar aquí: Requisitos del sistema

Aquellos que usan SQLSRV 3.1+ deben descargar el controlador Microsoft ODBC 11 para SQL Server

Los usuarios de PHP7 pueden descargar los últimos controladores de GitHub

Microsoft® ODBC Driver 13 para SQL Server es compatible con Microsoft SQL Server 2008, SQL Server 2008 R2, SQL Server 2012, SQL Server 2014, SQL Server 2016 (Preview), Analytics Platform System, Azure SQL Database y Azure SQL Data Warehouse.

Creando una conexión

$dbServer = "localhost,1234"; //Name of the server/instance, including optional port number (default is 1433)
$dbName = "db001"; //Name of the database
$dbUser = "user"; //Name of the user
$dbPassword = "password"; //DB Password of that user

$connectionInfo = array(
    "Database" => $dbName, 
    "UID" => $dbUser,
    "PWD" => $dbPassword
);

$conn = sqlsrv_connect($dbServer, $connectionInfo);

SQLSRV también tiene un controlador PDO. Para conectarse mediante DOP:

$conn = new PDO("sqlsrv:Server=localhost,1234;Database=db001", $dbUser, $dbPassword);

Haciendo una consulta simple

//Create Connection
$conn = sqlsrv_connect($dbServer, $connectionInfo);

$query = "SELECT * FROM [table]"; 
$stmt = sqlsrv_query($conn, $query);

Nota: el uso de corchetes [] es para escapar de la table palabras table ya que es una palabra reservada . Estos funcionan de la misma manera que los backticks ` hacen en MySQL .

Invocando un procedimiento almacenado

Para llamar a un procedimiento almacenado en el servidor:

$query = "{call [dbo].[myStoredProcedure](?,?,?)}"; //Parameters '?' includes OUT parameters

$params = array(
    array($name, SQLSRV_PARAM_IN),
    array($age, SQLSRV_PARAM_IN),
    array($count, SQLSRV_PARAM_OUT, SQLSRV_PHPTYPE_INT) //$count must already be initialised
);

$result = sqlsrv_query($conn, $query, $params);

Haciendo una consulta parametrizada

$conn = sqlsrv_connect($dbServer, $connectionInfo);

$query = "SELECT * FROM [users] WHERE [name] = ? AND [password] = ?";
$params = array("joebloggs", "pa55w0rd");

$stmt = sqlsrv_query($conn, $query, $params);

Si planea usar la misma instrucción de consulta más de una vez, con diferentes parámetros, se puede lograr lo mismo con las sqlsrv_prepare() y sqlsrv_execute() , como se muestra a continuación:

$cart = array(
    "apple" => 3,
    "banana" => 1,
    "chocolate" => 2
);

$query = "INSERT INTO [order_items]([item], [quantity]) VALUES(?,?)";
$params = array(&$item, &$qty); //Variables as parameters must be passed by reference

$stmt = sqlsrv_prepare($conn, $query, $params);

foreach($cart as $item => $qty){
    if(sqlsrv_execute($stmt) === FALSE) {
        die(print_r(sqlsrv_errors(), true));
    }
}

Obteniendo resultados de consultas

Hay 3 formas principales de obtener resultados de una consulta:

sqlsrv_fetch_array ()

sqlsrv_fetch_array() recupera la siguiente fila como una matriz.

$stmt = sqlsrv_query($conn, $query);

while($row = sqlsrv_fetch_array($stmt)) {
    echo $row[0];
    $var = $row["name"];
    //...
}

sqlsrv_fetch_array() tiene un segundo parámetro opcional para recuperar diferentes tipos de matriz: SQLSRV_FETCH_ASSOC , SQLSRV_FETCH_NUMERIC y SQLSRV_FETCH_BOTH (predeterminado) pueden usarse; cada uno devuelve las matrices asociativa, numérica o asociativa y numérica, respectivamente.


sqlsrv_fetch_object ()

sqlsrv_fetch_object() recupera la siguiente fila como un objeto.

$stmt = sqlsrv_query($conn, $query);

while($obj = sqlsrv_fetch_object($stmt)) {
    echo $obj->field; // Object property names are the names of the fields from the query
    //...
}

sqlsrv_fetch ()

sqlsrv_fetch() hace que la siguiente fila esté disponible para leer.

$stmt = sqlsrv_query($conn, $query);

while(sqlsrv_fetch($stmt) === true) {
    $foo = sqlsrv_get_field($stmt, 0); //gets the first field -
}

Recuperar mensajes de error

Cuando una consulta sale mal, es importante buscar los mensajes de error devueltos por el controlador para identificar la causa del problema. La sintaxis es:

sqlsrv_errors([int $errorsOrWarnings]);

Esto devuelve una matriz con:

Llave Descripción
SQLSTATE El estado en el que se encuentra el controlador SQL Server / OBDC
código El código de error de SQL Server
mensaje La descripción del error.

Es común usar la función anterior como tal:

$brokenQuery = "SELECT BadColumnName FROM Table_1";
$stmt = sqlsrv_query($conn, $brokenQuery);

if ($stmt === false) {
    if (($errors = sqlsrv_errors()) != null) {
        foreach ($errors as $error) {
            echo "SQLSTATE: ".$error['SQLSTATE']."<br />";
            echo "code: ".$error['code']."<br />";
            echo "message: ".$error['message']."<br />";
        }
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow