2012-10-05 20 views
20

Ich versuche, eine Verbindung mit einer vorhandenen SQL Server-Datenbank mithilfe von PDO mit der drivers provided by Microsoft herzustellen.Verbinden mit SQL Server über PDO mit SQL Server-Treiber

Ich habe Beispiele mit odbc, dblib, mssql usw. gesehen, aber ich glaube, die Verbindungszeichenfolge mit diesen Treibern sollte "sqlsrv" verwenden?

Gibt es einige gute Beispiele dafür, wie man das richtig macht? Sollte ich dies über eine andere Methode tun, lass es mich wissen. Vielen Dank!

Antwort

34

Nun, das ist der beste Teil über PDOs ist, dass es ziemlich einfach, jede Datenbank zuzugreifen. Vorausgesetzt, Sie haben die Treiber installiert haben, sollten Sie in der Lage sein, nur tun: meine Erfahrung

$db = new PDO("sqlsrv:Server=YouAddress;Database=YourDatabase", "Username", "Password"); 
+0

Vielen Dank für die erste von zehn Fragen zu Stackoverflow, um die Verbindungsparameter richtig zu bekommen. Die anderen Samples, die ich mir angesehen habe, hatten "Host" anstelle von "Server". – Mark

7

Ich habe das herausgefunden. Ganz einfach:

new PDO("sqlsrv:server=[sqlservername];Database=[sqlserverdbname]", "[username]", "[password]"); 
8

Wohlgemerkt, dass in und auch von anderen (PHP - Why is new SQLSRV driver slower than the old mssql driver?), dass PDO_SQLSRV mit ist viel langsamer als durch PDO_ODBC.

Wenn Sie die schneller verwenden möchten PDO_ODBC können Sie:

//use any of these or check exact MSSQL ODBC drivername in "ODBC Data Source Administrator" 
$mssqldriver = '{SQL Server}'; 
$mssqldriver = '{SQL Server Native Client 11.0}'; 
$mssqldriver = '{ODBC Driver 11 for SQL Server}'; 

$hostname='127.0.0.1'; 
$dbname='test'; 
$username='user'; 
$password='pw'; 
$dbDB = new PDO("odbc:Driver=$mssqldriver;Server=$hostname;Database=$dbname", $username, $password); 
+0

Darf ich meine Frage in Bezug auf http://serverfault.com/questions/722670/s1090unixodbcdriver-managerinvalid-string-or-buffer-length überprüfen –

+0

Dies hat nicht für mich mit den geschweiften Klammern. Funktioniert gut als '$ mssqldriver = 'ODBC-Treiber 11 für SQL Server';' –

+0

auf einem neuen Server würde der alte sqlsrv-Treiber keine Verbindung herstellen. Das hat mir eine Menge Zeit gespart. Vielen Dank! –

3

Dies funktioniert für mich, und in diesem Fall war eine Remote-Verbindung: Hinweis: Der Port für mich wichtig war

$dsn = "sqlsrv:Server=server.dyndns.biz,1433;Database=DBNAME"; 
$conn = new PDO($dsn, "root", "P4sw0rd"); 
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

$sql = "SELECT * FROM Table"; 

foreach ($conn->query($sql) as $row) { 
    print_r($row); 
} 
-1
try 
{ 

    $conn = new PDO("sqlsrv:Server=$server_name;Database=$db_name;ConnectionPooling=0", "", ""); 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

} 
catch(PDOException $e) 
{ 

    $e->getMessage(); 

}