Ho Apache 2.2.16 e PHP 5.4.3 su Linux Debian 6 x64.Driver ODBC nativo del server MSSQL per Linux e PHP 5.4
Per installare driver nativo ODBC del MSSQL Server per Linux, io uso le seguenti istruzioni: http://www.codesynthesis.com/~boris/blog/2011/12/02/microsoft-sql-server-odbc-driver-linux/
ho configurato il mio file odbc.ini questo modo:
[mydsn]
Driver = SQL Server Native Client 11.0
Database = datbase
Server = xxx.xxx.xxx.xxx,port
e la mia ODBCINST.INI questo modo:
[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
Per provare, ho eseguito il seguente comando:
$ isql -v mydsn dbusername dbpassword
E ho avuto successo:
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
Poi, un phpize utilizzato per installare unixODBC su PHP 5.4, utilizzando questo: (Il primo comando, ln -s ..., viene utilizzato perché ./ configurare non riesce a trovare le intestazioni di PHP sulla posizione predefinita)
$ sudo ln -s /usr/include/php5 /usr/include/php
$ phpize
$ ./configure --with-pdo-odbc=unixODBC && make && make test
$ sudo make install
sul mio phpinfo() ottengo:
PDO support - enabled
PDO drivers - odbc
PDO Driver for ODBC (unixODBC) - enabled
ODBC Connection Pooling - Enabled, strict matching
Ora è il momento di provare tutto su uno 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>";
}
?>
Ma non funziona ... ho ricevuto questo messaggio di errore:
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
Quindi la mia domanda è: qual è accadere? Che configurazione mi manca? Come configurare correttamente il driver nativo ODBC del server MSSQL su Linux e PHP 5.4?
Ps .: Quando provo a utilizzare il file odbc_connect(), PHP dice che la funzione non esiste.
Nota sicura del problema - solo cercando di offrire suggerimenti finché la persona giusta non apre la domanda. 1) Controlla i permessi su quella directory "impossibile aprire" - assicurati che apache (o www, o qualunque cosa sia PHP in esecuzione) possa leggere/aprire quella directory/file. 2) Hai provato "generico" e non "unixODBC" per PHP PDO? – Robbie
scusa, cosa intendevi per "generico"? come posso testarlo? – vinigarcia87
Quando hai compilato "--with-pdo-odbc = unixODBC", c'è anche una versione "--with-pdo-odbc = generic, dir, libname, ldflags, cflags" - non so se funzionerà come Non l'ho mai fatto, ma solo lanciando qualcosa a te per provare se nessun altro dà indicazioni. – Robbie