Conectando Laravel con SQL SERVER 2012
- Laravel
- Sql server
- 19 mayo 2018
Hace poco trabajando para un cliente en el módulo de SII, nos hizo una petición extraña, habíamos realizado una Web App en Laravel con conexión a BBDD MySql como suele ser normal, pero el tenia todos los datos en SQL SERVER.
Habíamos creado un proceso Batch para copiar los datos y pasarlos de una BBDD a otra, este funcionaba de forma correcta pero el cliente no quería tener corriendo este proceso por temas internos.
Después de analizar el trabajo se decidió realizar la conexión de nuestra App con SQL SERVER.
Manos a la obra.
Lo primero que tuvimos que hacer es bajar los drivers de conexión a Base de datos de SQL SERVER con PHP.
Nuestro servidor Apache está bajo Windows por lo que no tuvimos muchos problemas, aunque hay una explicación de cómo hacerlo bajo servidores Linux.
Primeros pasos
Descargar los drivers de la página de Microsoft.
https://www.microsoft.com/en-us/download/details.aspx?id=20098
Os bajara un ejecutable que en realidad es un zip, ahora solo tenéis que descomprimir todas las dll en vuestra carpeta del servidor donde esté instalado PHP. En mi caso X:\xampp\php\ext. Tenéis que saber que versión de PHP tenéis instalado en vuestro servidor, PHP 5.6, PHP 7.0, etc. En mi caso PHP 7.0.
Os dejo una tabla con la versión del controlador que necesitáis:
PHP ↓Versión de PHP | 5.2 | 4.3 | 4.0 | 3.2 | 3.1 |
---|---|---|---|---|---|
7.2 | 7.2.1+ en Windows 7.2.0+ en otras plataformas | ||||
7.1 | 7.1.0+ | 7.1.0+ | |||
7.0 | 7.0.0+ | 7.0.0+ | 7.0.0+ | ||
5.6 | 5.6.4 | ||||
5.5 | 5.5.16 | 5.5.16 | |||
5.4 | 5.4.32 | 5.4.32 |
Una vez realizado esto, tenemos que decirle a PHP que hemos añadido n nuevo modulo o extension para ello abrimos el archivo de configuración PHP.ini y buscamos
; Windows Extensions extension=php_bz2.dll
Añadimos una nueva línea, al final de todas las extensiones
extension=php_sqlsrv_7_ts.dll
Os dejo la tabla para saber cual teneis que usar, sino aparece aqui vuestra versión, podeis consultar esta página .
Controladores de Microsoft 5.2 para PHP para SQL Server:
En Windows, se incluyen las siguientes versiones del controlador:
Archivo de controlador | Versión de PHP | ¿Seguridad subprocesos? | Uso con PHP.dll |
---|---|---|---|
php_sqlsrv_7_nts.dll de 32 bits php_pdo_sqlsrv_7_nts.dll de 32 bits | 7.0 | no | php7.dll de 32 bits |
php_sqlsrv_7_ts.dll de 32 bits php_pdo_sqlsrv_7_ts.dll de 32 bits | 7.0 | sí | php7ts.dll de 32 bits |
php_sqlsrv_7_nts.dll de 64 bits php_pdo_sqlsrv_7_nts.dll de 64 bits | 7.0 | no | php7.dll de 64 bits |
php_sqlsrv_7_ts.dll de 64 bits php_pdo_sqlsrv_7_ts.dll de 64 bits | 7.0 | sí | php7ts.dll de 64 bits |
php_sqlsrv_71_nts.dll de 32 bits php_pdo_sqlsrv_71_nts.dll de 32 bits | 7.1 | no | php7.dll de 32 bits |
php_sqlsrv_71_ts.dll de 32 bits php_pdo_sqlsrv_71_ts.dll de 32 bits | 7.1 | sí | php7ts.dll de 32 bits |
php_sqlsrv_71_nts.dll de 64 bits php_pdo_sqlsrv_71_nts.dll de 64 bits | 7.1 | no | php7.dll de 64 bits |
php_sqlsrv_71_ts.dll de 64 bits php_pdo_sqlsrv_71_ts.dll de 64 bits | 7.1 | sí | php7ts.dll de 64 bits |
php_sqlsrv_72_nts.dll de 32 bits php_pdo_sqlsrv_72_nts.dll de 32 bits | 7.2 | no | php7.dll de 32 bits |
php_sqlsrv_72_ts.dll de 32 bits php_pdo_sqlsrv_72_ts.dll de 32 bits | 7.2 | sí | php7ts.dll de 32 bits |
php_sqlsrv_72_nts.dll de 64 bits php_pdo_sqlsrv_72_nts.dll de 64 bits | 7.2 | no | php7.dll de 64 bits |
php_sqlsrv_72_ts.dll de 64 bits php_pdo_sqlsrv_72_ts.dll de 64 bits | 7.2 | sí | php7ts.dll de 64 bits |
Una vez realizado el cambio en el archivo PHP.ini reiniciar el servidor, hacer un stop / start del Apache y ya podríais trabajar con SQL SERVER en vuestra aplicación.
Ir al archivo database.php dentro de vuestra carpeta config y añadir los elementos necesarios.
return [ /* |-------------------------------------------------------------------------- | Default Database Connection Name |-------------------------------------------------------------------------- | | Here you may specify which of the database connections below you wish | to use as your default connection for all database work. Of course | you may use many connections at once using the Database library. | */ 'default' => env('DB_CONNECTION', 'sqlsrv'), /* |-------------------------------------------------------------------------- | Database Connections |-------------------------------------------------------------------------- | | Here are each of the database connections setup for your application. | Of course, examples of configuring each database platform that is | supported by Laravel is shown below to make development simple. | | | All database work in Laravel is done through the PHP PDO facilities | so make sure you have the driver for your particular database of | choice installed on your machine before you begin development. | */ 'connections' => [ 'sqlite' => [ 'driver' => 'sqlite', 'database' => env('DB_DATABASE', database_path('database.sqlite')), 'prefix' => '', ], 'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'strict' => true, 'engine' => null, ], 'pgsql' => [ 'driver' => 'pgsql', 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '5432'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8', 'prefix' => '', 'schema' => 'public', 'sslmode' => 'prefer', ], 'sqlsrv' => [ 'driver' => 'sqlsrv', 'host' => env( 'DB_HOST' ), 'port' => env( 'DB_PORT' ), 'database' => env( 'DB_DATABASE' ), 'username' => env( 'DB_USERNAME' ), 'password' => env( 'DB_PASSWORD' ), 'prefix' => '', 'charset' => 'UTF-8', 'pooling' => false, ], ], /* |-------------------------------------------------------------------------- | Migration Repository Table |-------------------------------------------------------------------------- | | This table keeps track of all the migrations that have already run for | your application. Using this information, we can determine which of | the migrations on disk haven't actually been run in the database. | */ 'migrations' => 'migrations', /* |-------------------------------------------------------------------------- | Redis Databases |-------------------------------------------------------------------------- | | Redis is an open source, fast, and advanced key-value store that also | provides a richer set of commands than a typical key-value systems | such as APC or Memcached. Laravel makes it easy to dig right in. | */ 'redis' => [ 'client' => 'predis', 'default' => [ 'host' => env('REDIS_HOST', '127.0.0.1'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_PORT', 6379), 'database' => 0, ], ], ];
Todos los datos los leerá de vuestro archivo .env como si se tratara de MySQL.
Estoy preparando un update de este artículo, que publicaré muy pronto en Expansyon.
Cualquier cosa lo comentamos, recordar que podéis contacta conmigo por redes sociales o por el formulario de la web.