2012-10-05 46 views
20

Estoy tratando de conectarme a una base de datos de SQL Server existente usando PDO con el drivers provided by Microsoft.Conectar a SQL Server a través de PDO usando el controlador de SQL Server

He visto ejemplos usando odbc, dblib, mssql, etc., sin embargo, creo que la cadena de conexión con estos controladores debería usar 'sqlsrv'?

¿Hay algún buen ejemplo de cómo hacer esto correctamente? Si debería hacer esto por algún otro método, por favor avíseme. ¡Gracias!

Respuesta

34

Bueno, esa es la mejor parte de las PDO es que es muy fácil acceder a cualquier base de datos. Siempre que haya instalado los controladores, debería ser capaz de hacerlo solo:

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

Gracias por ser la primera de diez preguntas en Stackoverflow para obtener los parámetros de conexión correctos. Las otras muestras que estaba viendo tenían "Host" en lugar de "Servidor". – Mark

7

Entendemos esto. Bastante simple:

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

mente que en mi experiencia y también de otros (PHP - Why is new SQLSRV driver slower than the old mssql driver?) que el uso de PDO_SQLSRV es mucho más lenta que a través PDO_ODBC.

Si desea utilizar el más rápido PDO_ODBC puede utilizar:

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

Puede consultar mi pregunta relacionada http://serverfault.com/questions/722670/s1090unixodbcdriver-managerinvalid-string-or-buffer-length –

+0

Esto no funcionó para mí con las llaves. Funciona muy bien como '$ mssqldriver = 'Controlador ODBC 11 para SQL Server';' –

+0

en un nuevo servidor; el antiguo controlador sqlsrv no se conectaba. esto me salvó un BUNCH de tiempo. ¡Gracias! –

3

Esto funciona para mí, y en este caso fue una conexión remota: Nota: El puerto fue importante para mí

$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(); 

} 
Cuestiones relacionadas