Tengo Apache 2.2.16 y PHP 5.4.3 en Linux Debian 6 x64.Controlador ODBC nativo del servidor MSSQL para Linux y PHP 5.4
Para instalar el controlador nativo de ODBC del MSSQL Server para Linux, yo uso las siguientes instrucciones: http://www.codesynthesis.com/~boris/blog/2011/12/02/microsoft-sql-server-odbc-driver-linux/
he configurado mi archivo odbc.ini esta manera:
[mydsn]
Driver = SQL Server Native Client 11.0
Database = datbase
Server = xxx.xxx.xxx.xxx,port
y mi odbcinst.ini este manera:
[SQL Server Native Client 11.0]
Description=Microsoft SQL Server ODBC Driver V1.0 for Linux
Driver=/opt/microsoft/sqlncli/lib64/libsqlncli-11.0.so.1790.0
Threading=1
UsageCount=1
Para probar, corro el siguiente comando:
$ isql -v mydsn dbusername dbpassword
Y tengo éxito:
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
Entonces, un phpize utilizar para instalar unixODBC en PHP 5.4, utilizando la siguiente: (El primer comando, ln -s ..., porque se utiliza ./ configure no puede encontrar las cabeceras de PHP en la ubicación predeterminada)
$ sudo ln -s /usr/include/php5 /usr/include/php
$ phpize
$ ./configure --with-pdo-odbc=unixODBC && make && make test
$ sudo make install
en mi phpinfo() me sale:
PDO support - enabled
PDO drivers - odbc
PDO Driver for ODBC (unixODBC) - enabled
ODBC Connection Pooling - Enabled, strict matching
Ahora es el momento de probar todo en un script PHP 5.4:
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
$conn = new PDO('odbc:DSN=mydsn;UID='.$usr.';PWD='.$psw);
$query = 'select * from my_table';
$stmt = $conn->prepare($query);
$stmt->execute();
while ($row = $stmt->fetch()) {
echo "<pre>";
print_r($row);
echo "</pre>";
}
?>
Pero esto no funciona ... Tengo este mensaje de error:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[01000] SQLDriverConnect: 0
[unixODBC][Driver Manager]Can't open lib '/opt/microsoft/sqlncli/lib64/libsqlncli-11.0.so.1790.0' : file not found'
in /var/www/testemssql.php:17
Stack trace:
#0 /var/www/testemssql.php(17): PDO->__construct('odbc:DSN=mydsn...')
#1 {main} thrown in /var/www/testemssql.php on line 17
Así que mi pregunta es: ¿qué es ¿ocurrir? ¿Qué configuración me falta? ¿Cómo configurar correctamente el controlador ODBC nativo del servidor MSSQL en Linux y PHP 5.4?
Ps .: Cuando trato de usar el odbc_connect() PHP dice que la función no existe.
Tenga en cuenta que no hay problema, simplemente intenta ofrecer sugerencias hasta que la persona adecuada abre la pregunta. 1) Verifique los permisos en ese directorio "no se puede abrir": asegúrese de que apache (o www, o cualquier PHP que se ejecute como) pueda leer/abrir ese directorio/archivo. 2) ¿Has probado "genérico" y no "unixODBC" para PHP PDO? – Robbie
lo siento, ¿qué quisiste decir con "genérico"? ¿Cómo puedo probar esto? – vinigarcia87
Cuando compiló con "--with-pdo-odbc = unixODBC", también hay una versión "--with-pdo-odbc = generic, dir, libname, ldflags, cflags" - no sé si funcionará como Nunca lo hice, pero solo lancé algo para que lo pruebes si nadie más da consejos. – Robbie