para microsoft instalar for con php sql-server pdo odbc

microsoft - php driver



Conecte PHP a MSSQL a través de PDO ODBC (3)

Hay varios archivos de configuración que necesita configurar. /etc/odbc.ini , /etc/odbcinst.ini y /etc/freetds/freetds.conf (estas ubicaciones son válidas para Ubuntu 12.04 y probablemente sean correctas para la mayoría de * nixes).

Tendrá que instalar unixodbc y freetds (no estoy seguro de cuáles son los nombres de los paquetes en CentOS). En Ubuntu esto sería apt-get install unixodbc tdsodbc .

Para obtener ayuda con la instalación de estos, consulte esta pregunta. No se puede instalar FreeTDS a través del Administrador de paquetes de Yum.

/etc/odbc.ini (este archivo puede estar vacío)

# Define a connection to a Microsoft SQL server # The Description can be whatever we want it to be. # The Driver value must match what we have defined in /etc/odbcinst.ini # The Database name must be the name of the database this connection will connect to. # The ServerName is the name we defined in /etc/freetds/freetds.conf # The TDS_Version should match what we defined in /etc/freetds/freetds.conf [mssql] Description = MSSQL Server Driver = freetds Database = XXXXXX ServerName = MSSQL TDS_Version = 7.1

/etc/odbcinst.ini

# Define where to find the driver for the Free TDS connections. # Make sure you use the right driver (32-bit or 64-bit). [freetds] Description = MS SQL database access with Free TDS Driver = /usr/lib/i386-linux-gnu/odbc/libtdsodbc.so #Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so Setup = /usr/lib/i386-linux-gnu/odbc/libtdsS.so UsageCount = 1

/etc/freetds/freetds.conf (o puede encontrarlo en /etc/freetds.conf)

# The basics for defining a DSN (Data Source Name) # [data_source_name] # host = <hostname or IP address> # port = <port number to connect to - probably 1433> # tds version = <TDS version to use - probably 8.0> # Define a connection to the Microsoft SQL Server [mssql] host = XXXXXX port = 1433 tds version = 7.1

Es posible que deba cambiar la tds version = 7.1 la tds version = 7.1 anterior según su versión de MSSQL.

Deberá reiniciar Apache después de realizar estos cambios.

En su código PHP, creará su objeto PDO de esta manera:

$pdo = new PDO("dblib:host=mssql;dbname=$dbname", "$dbuser","$dbpwd");

Tenga en cuenta que su nombre de usuario puede necesitar estar en el formato: domain/username .

Además, sabrá que funcionó si ejecuta phpinfo() en su página y busca "freetds" que mostrarán una sección mssql con freetds enumerados como la versión de la biblioteca.

Cuando ejecuto este código:

print_r(PDO::getAvailableDrivers());

Dice que tengo el controlador odbc disponible.

Array ( [0] => mysql [1] => odbc [2] => sqlite )

Sin embargo, cuando intento usarlo así:

$handle = new PDO("odbc:Server=dbServerIpAddress,myportnumber;Database=mydatabase", "myusername", ''mypassword'');

No hace nada, no hay errores y no funciona en absoluto. ¡Ni siquiera ejecutará más allá de esa línea!

¿Cómo puedo conectar PHP a esta base de datos MSSQL a través de PDO y ODBC?


La respuesta aceptada es correcta hasta la llamada PHP real. Como alguien ha comentado correctamente, debería llamar al controlador odbc. En segundo lugar, no está utilizando el nombre de fuente de datos (DSN) que se ha configurado en odbc.ini, sino que de hecho está creando un DSN ad-hoc. En lugar:

$pdo = new PDO("odbc:mssql", "$dbuser","$dbpwd");

donde mssql se refiere al objeto DSN en odbc.ini

Puede crear un DSN ad-hoc de la siguiente manera:

$pd = new PDO(''odbc:DRIVER=FreeTDS;SERVERNAME=mssql;DATABASE='' . $dbName, $dbuser, $dbpass);

donde mssql ahora se refiere al objeto del servidor en freetds.conf y FreeTDS el objeto del controlador en odbcinst.ini

(Esto realmente debería ser un comentario, pero no tengo los puntos de rep).


Si desea configurar directamente una conexión pdo odbc utilizando el controlador FreeTDS al servidor MS SQL, sin especificarlo en el archivo de configuración freetds.conf.

$connection_string = "odbc:DRIVER=FreeTDS;SERVER=$serverName;PORT=$portNo;DATABASE=$dbName"; $conn = new PDO($connection_string, $dbUser, $dbPass);

Si tiene un servidor MSSQL que tiene una instancia con nombre, puede eliminar el puerto no y luego modificar $ serverName en el formato server_ip / instance_name. Ejemplo: "192.168.1.1 / sqlexpress" donde sqlexpress es el nombre de la instancia.

$connection_string = "odbc:DRIVER=FreeTDS;SERVER=$serverName;DATABASE=$dbName"; $conn = new PDO($connection_string, $dbUser, $dbPass);

Tenga en cuenta que configure la ubicación del controlador en odbcinst.ini

[FreeTDS] Description = TDS driver (Sybase/MS SQL) Driver = libtdsodbc.so Setup = libtdsS.so