2015-04-10 19 views
7

Sto usando mac computer OSX 10.9. Freetds e unixODBC sono già installati sul mio computer e aggiunti come estensione a php, cercando di connettersi a un server MSSQL remoto. Di seguito è riportato il mio test di connessione:php dblib, Errore: SQLSTATE [HY000] Nome macchina host sconosciuto (gravità 2)

<?php 
$dbh = new PDO('dblib:host=Hostname ;dbname=Dbname', 'user', 'pw'); 
if (!$dbh) { 
    die('Something went wrong while connecting to MSSQL'); 
} 
?> 

Il file di log di errore spettacolo:

[error] [client 127.0.0.1] PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] Unknown host machine name (severity 2) 

Quale potrebbe essere il problema? Sembra che i miei FreeTDS e unixODBC stanno lavorando bene se uso terminale per collegare allo stesso database, come di seguito:

$ isql Hostname user pw 
+---------------------------------------+ 
| Connected!       | 
|          | 
| sql-statement       | 
| help [tablename]      | 
| quit         | 
|          | 
+---------------------------------------+ 
SQL> 

e

$ tsql -S Hostname -U user 
Password: 
locale is "en_US.UTF-8" 
locale charset is "UTF-8" 
using default charset "UTF-8" 
1> 

qui è la mia freetds.conf

[global] 
    # TDS protocol version 
    tds version = 8.0 
[Hostname] 
host = IP 
port = 1433 
tds version = 8.0 
client charset = UTF-8 ##needed on MAC OS X 
dump file = /tmp/freetds.log 

e mio odbc.ini

[Hostname] 
#Driver=/usr/local/lib/libtdsodbc.so 
Driver = /usr/local/Cellar/freetds/0.91_2/lib/libtdsodbc.so 
Trace=No 
Server=IP 
Port=1433 
TDS_Version=8.0 
client charset = UTF-8 

my phpinfo() mostra che l'estensione è stata aggiunta, c'è dblib nella sezione PDO e la sezione pdo_dblib ha i freetds abilitati per Flavor abilitati.

Quindi qual è il problema? Qualche idea su cosa dovrei fare? Qualsiasi assistenza sarà molto apprezzata.

qui è la mia ODBCINST.INI:

[freetdS] 
Description = v0.63 with protocol v8.0 
Driver = /usr/local/Cellar/freetds/0.91_2/lib/libtdsodbc.so 
+0

Hai riavviato Apache (o qualsiasi server Web che stai utilizzando) dopo aver modificato questi file di configurazione? –

+0

Inoltre, ho notato nel tuo odbc.ini che "Hostname" è scritto male (almeno il codice che mostri qui) - lo mostri come "Hostnmae". –

+0

[La mia risposta] (http://stackoverflow.com/questions/20163776/connect-php-to-mssql-via-pdo-odbc/20165384#20165384) a una domanda simile potrebbe essere utile. Dai un'occhiata alla configurazione di 'odbcinst.ini' e nel mio file' odbc.ini' ho un parametro 'ServerName' ma non un parametro' Server'. –

risposta

0

Dato che non è possibile eseguire il debug di questo per procura, senza reali informazioni file e si scelto di proteggere gli indirizzi IP ei nomi di host con testo fittizio. Sto andando con il codice PHP. Il nome host dovrebbe essere un FQDN o un indirizzo IP. Non il testo del segnaposto proveniente dai file ini.

<?php 
    $dbh = new PDO('dblib:host=[ ip address || example.com || localhost] ;dbname=Dbname', 'user', 'pw'); 
    if (!$dbh) 
    { 
     die('Something went wrong while connecting to MSSQL'); 
    } 
?> 
2

realtà ho risolto questo problema cancellando sia mssql.so, pdo_dblib.so nella cartella php estensione, ri-scaricare php5.4, phpize e ricostruire sia i file .so e rimetterlo. Quindi funziona.

Sembra che il vecchio file pdo_dblib.so che ho fatto indicasse un altro freetds.conf da qualche altra parte.

+0

'locate freetds.conf' ti darà un indizio se ci sono più file conf in giro (anche se potresti dover prima impostare il db per quello su OSX). –