2009-04-28 14 views
0

Ich versuche, mit PHP 5.2.9-2 auf Windows XP SP2 eine Verbindung zu SQL Server 2008 (nicht ausdrücklich) herzustellen. Ich kann von SQL Server Management Studio auf demselben Computer eine Verbindung zum SQL Server-Remote herstellen.Verbinden mit SQL Server 2008 mit PDO

Mein erster Versuch war:

$conn = new PDO("mssql:host={$host};dbname={$db}", $user, $pass); 

Welche diesen Fehler gibt:

 
PHP Fatal error: 
Uncaught exception 'PDOException' with message 
'SQLSTATE[0100] Unable to connect: SQL Server is unavailable or does not exist. 
Access denied. (severity 9)'

Zweiten Versuch (gefunden auf experts-exchange)

$conn = new PDO("odbc:Driver={SQL Server Native Client 10.0};Server={$host};Database={$db};Uid={$user};Pwd={$pass}", 
         $user, $pass); 

Dies funktioniert, aber ich kann‘ t verwende PDO::lastInsertId(), was ich gerne hätte:

 Driver does not support this function: driver does not support lastInsertId()

Haben Sie Vorschläge? Jede Hilfe würde sehr geschätzt werden.

Antwort

1

Ich bin mir ziemlich sicher, dass PDO mit dem mssql-Datenserver-Typ dblib benötigt, um eine Verbindung herzustellen. Haben Sie dblib auf der Maschine installiert? Stellen Sie sicher, dass Sie ntwdblib.dll irgendwo im Pfad Ihres Systems finden können. Ich weiß, dass dies nicht mit der Fehlermeldung, die Sie erhalten, jive, aber ich bin mir nicht sicher, dass ich die Fehlermeldung vertraue.

0

That you cannot use SQL Server authentication because only Windows authentication is permitted.

Überprüfen Sie, ob der Server running Mixed mode authentication.

Auch ist zu überprüfen, ob this SO question Ihnen hilft.

+0

Danke dafür. Die andere Frage hatte keine Lösung. Es wird im gemischten Modus ausgeführt, da ich eine Verbindung über SQL Server Management Studio entweder mithilfe der Windows-Authentifizierung oder mithilfe einer SQL Server-Anmeldung, die ich für die Datenbank erstellt habe, herstellen kann. –

1

Ich aktualisierte ntwdblib.dll wie vorgeschlagen here und es funktioniert jetzt.

Leider kann ich immer noch PDO::lastInsertId() nicht verwenden, weil anscheinend dieser Fahrer es auch nicht unterstützt, also war es nicht wirklich den Ärger wert. Ich kann jedoch das Äquivalent SELECT @@IDENTITY as Id verwenden.