2015-04-10 6 views
7

Ich verwende den Mac-Computer OSX 10.9. Freetds und unixODBC sind bereits auf meinem Computer installiert und wurden als Erweiterung zu PHP hinzugefügt, um eine Verbindung zu einem entfernten MSSQL-Server herzustellen. Unten ist meine Verbindungsprüfung:php dblib, Fehler: SQLSTATE [HY000] Unbekannter Name des Host-Rechners (Schweregrad 2)

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

Die Datei anzeigen Fehlerprotokolle:

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

Was könnte das Problem sein? Es scheint, dass meine freetds und unixODBC arbeiten gut, wenn ich Terminal verwenden, wie unten auf die gleiche Datenbank verbinden:

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

und

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

hier ist mein 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 

und meine 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 

mein phpinfo() zeigt, dass die Erweiterung hinzugefügt wurde, gibt es dblib in PDO Abschnitt und pdo_dblib Abschnitt haben Treiber Flavour aktiviert freetds.

Also, was ist das Problem? Irgendeine Idee von was ich tun sollte? Jede Hilfe wird sehr geschätzt.

hier ist mein odbcinst.ini:

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

Haben Sie Apache (oder welchen Web-Server, den Sie verwenden) neu gestartet, nachdem Sie diese Konfigurationsdateien geändert haben? –

+0

Ich bemerke auch in deiner odbc.ini, dass "Hostname" falsch geschrieben ist (zumindest der Code, den du hier zeigst) - du zeigst es als 'Hostnmae'. –

+0

[Meine Antwort] (http://stackoverflow.com/questions/20163776/connect-php-to-mssql-via-pdo-odbc/20165384#20165384) auf eine ähnliche Frage kann hilfreich sein. Schauen Sie sich die 'odbcinst.ini' Konfiguration an und in meiner' odbc.ini' Datei habe ich einen 'ServerName' Parameter aber keinen' Server' Parameter. –

Antwort

0

Da es nicht möglich ist, dies ohne Informationen echte Dateien von Proxy zu debuggen und Sie haben ausgewaehlt den IP-Adressen und Hostnamen mit Dummy-Text zu schützen. Ich gehe mit dem PHP-Code. Der Hostname sollte ein FQDN oder eine IP-Adresse sein. Nicht der Platzhaltertext aus den INI-Dateien.

<?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

Ich löste tatsächlich diese Frage, indem sowohl mssql.so Löschen pdo_dblib.so in PHP-Erweiterung Ordnern, erneut herunterladen php5.4, phpize und baut sowohl die .so-Dateien wieder und legt sie zurück. Dann funktioniert es.

Es scheint, dass die olde pdo_dblib.so-Datei, die ich gemacht habe, irgendwo anders auf eine andere freetds.conf zeigte.

+0

'locate freetds.conf' gibt Ihnen einen Anhaltspunkt, wenn mehrere conf-Dateien hängen bleiben (obwohl Sie die Datenbank dafür unter OSX einrichten müssen). –

Verwandte Themen