viernes, 4 de marzo de 2016

INFORMACION:
Que es PHP:(acrónimo recursivo de PHP: Hypertext Preprocessor) es un lenguaje de código abierto muy popular especialmente adecuado para el desarrollo web y que puede ser incrustado en HTML.
Que es SQL Server: es un sistema de gestión de bases de datos relacionales (RDBMS) de Microsoft que está diseñado para el entorno empresarial.

Es poco comun trabajar Sql Server con PHP pero las todo es posible asi pues en este tutorial mostrare los pasos a seguir para lograrlo. Ademas intentare mostrar algunos errores que pueden suceder para poder ayudar a los que se guien por este tutorial.

Versiones a utilizar:

  • PHP version 5.5.27 
  • SQL Server 2012 Servipack 1

 Primero tenemos que descargar el driver que nos proporciona Microsoft
https://www.microsoft.com/en-us/download/details.aspx?id=20098


Encontramos varias versiones disponibles. La que utilizaremos dependera de la version de PHP que estemos utilizando.

Para saber cual nesecitamos basta con ver las caracteristicas de nuestro PHP  “phpinfo()” y notar las areas siguientes: (colocar en un archivo php "phpinfo();" y ejecutarlo en el explorador).



Dependiendo de estos dos valores eligiremos nuestros archivos. En mi caso seran:


php_pdo_sqlsrv_55_ts.dll
php_sqlsrv_55_ts.dll

Esto es por la version de php y thead safety (enable), si no se elegirian los dll con “nts” y la version de php que corresponda.
Les muestro un cuadro donde se detalla las versiones de php que trae incluido cada exe que se puede descargar.


1.       Ahora solo debemos pegar los dll seleccionados en la carpeta ext de php. Donde encontrar esta carpeta dependera de como hayas instalado php. En xamp puede que la localizacion sea la siguiente:
      C:\xampp\php\ext. Pero como dije antes depende de como instalastes PHP.

1.       Lo que sigue es agregar las siguientes lineas a nuestro php.ini, lo encontraremos en la carpeta de intalacion de PHP en xamp C:\xampp\php.

[PHP_SQLSRV]
extension=php_sqlsrv_55_ts.dll
[PHP_PDO_SQLSRV]
extension=php_pdo_sqlsrv_55_ts.dll

Echo esto solo tenemos que reiniciar nuestro apache y veremos en la informacion de nuestro php lo siguiente: (colocar en un archivo php "phpinfo();" y ejecutarlo en el explorador).

1.       Lo ultimo que tenemos que hacer es probar la conexión, para eso utilizaremos el siguiente codigo:

<?php
        $serverName = "localhost";

        $connectionInfo = array("Database" => "test");
        $conn = sqlsrv_connect($serverName, $connectionInfo);

        if ($conn) {
            echo "Conexión exitosa ...";
        } else {
            echo "Conexión no se realizada ...";
            die(print_r(sqlsrv_errors(), true));
        }
        ?>

NOTA: al omitir usuario y contrasena la conexión se intentara usando autenticacion de windows. Si deseas ejemplos compleros puedes visitar:  http://php.net/manual/es/function.sqlsrv-connect.php

Al ejecutar nuestro codigo notamos un error de facil solucion. (Posiblemente)


Conexión no se realizada ...Array ( [0] => Array ( [0] => IMSSP [SQLSTATE] => IMSSP [1] => -49 [code] => -49 [2] => This extension requires the Microsoft ODBC Driver 11 for SQL Server. Access the following URL to download the ODBC Driver 11 for SQL Server for x86: http://go.microsoft.com/fwlink/?LinkId=163712 [message] => This extension requires the Microsoft ODBC Driver 11 for SQL Server. Access the following URL to download the ODBC Driver 11 for SQL Server for x86:http://go.microsoft.com/fwlink/?LinkId=163712 ) [1] => Array ( [0] => IM002 [SQLSTATE] => IM002 [1] => 0 [code] => 0 [2] => [Microsoft][Administrador de controladores ODBC] No se encuentra el nombre del origen de datos y no se especific ningn controlador predeterminado [message] => [Microsoft][Administrador de controladores ODBC] No se encuentra el nombre del origen de datos y no se especific ningn controlador predeterminado ) )

Este error es de facil solicion, solo tenemos que descargar el ODBC Driver que nos recomienda del link que nos proporciona y listo. Esto error es porque estoy utilizando la version 3.2 de los drivers.
Cuando solucionamos esto nos mostrara un mensaje de excito…

Si lo que deseas es autenticacion con usuario y contrasena solo tienes que usar el codigo siguiente:
<?php
        $serverName = "localhost";
        $connectionInfo = array("Database" => "test", "UID" => "ortr", "PWD" => "password");
        $conn = sqlsrv_connect($serverName, $connectionInfo);

        if ($conn) {
            echo "Conexión excitosa ...";
        } else {
            echo "Conexión no realizada ...";
            die(print_r(sqlsrv_errors(), true));
        }
        ?>

Si nos resulta este error es porque nuestro usuario no tiene los permisos necesarios.

Conexión no realizada ...Array ( [0] => Array ( [0] => 28000 [SQLSTATE] => 28000 [1] => 18456 [code] => 18456 [2] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Error de inicio de sesin del usuario 'ortr'. [message] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Error de inicio de sesin del usuario 'ortr'. ) [1] => Array ( [0] => 42000 [SQLSTATE] => 42000 [1] => 4060 [code] => 4060 [2] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]No se puede abrir la base de datos "test" solicitada por el inicio de sesin. Error de inicio de sesin. [message] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]No se puede abrir la base de datos "test" solicitada por el inicio de sesin. Error de inicio de sesin. ) [2] => Array ( [0] => 28000 [SQLSTATE] => 28000 [1] => 18456 [code] => 18456 [2] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Error de inicio de sesin del usuario 'ortr'. [message] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Error de inicio de sesin del usuario 'ortr'. ) [3] => Array ( [0] => 42000 [SQLSTATE] => 42000 [1] => 4060 [code] => 4060 [2] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]No se puede abrir la base de datos "test" solicitada por el inicio de sesin. Error de inicio de sesin. [message] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]No se puede abrir la base de datos "test" solicitada por el inicio de sesin. Error de inicio de sesin. ) )

Solo tenemos que ir  a la parte de seguridad de SQL y localizar nuestro ususario y en las propiedades hacer un pequeño cambio.



Solo tenemos que agregar a los roles “sysadmin” y con eso el error sera solucionado.

Solo tenemos que agregar el role “sysadmin” y con eso el error sera solucionado. Espero les sea de utilidad este pequenho tutorial, si tienes dudas comenten y les respondere lo mas rapido que posible.

0 comentarios:

Publicar un comentario