使用 SQL Server Driver 通过 PDO 连接到 SQL Server

Posted

技术标签:

【中文标题】使用 SQL Server Driver 通过 PDO 连接到 SQL Server【英文标题】:Connect to SQL Server through PDO using SQL Server Driver 【发布时间】:2012-09-26 16:28:53 【问题描述】:

我正在尝试使用带有drivers provided by Microsoft 的 PDO 连接到现有 SQL Server 数据库。

我见过使用 odbc、dblib、mssql 等的示例,但是我认为与这些驱动程序的连接字符串应该使用 'sqlsrv'?

有没有很好的例子来说明如何正确地做到这一点?如果我应该通过其他方法执行此操作,请告诉我。谢谢!

【问题讨论】:

【参考方案1】:

嗯,关于 PDO 最好的部分是它可以很容易地访问任何数据库。如果您已经安装了这些驱动程序,您应该能够:

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

【讨论】:

我需要在服务器上启用哪些驱动程序?只启用 pdo_odbc 会起作用吗?【参考方案2】:

请注意,根据我和其他 (php - Why is new SQLSRV driver slower than the old mssql driver?) 的经验,使用 PDO_SQLSRV 比通过 PDO_ODBC 慢得多。

如果您想使用更快的 PDO_ODBC,您可以使用:

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

【讨论】:

你可以检查我的问题相关serverfault.com/questions/722670/… 这对我来说不适用于花括号。非常适合$mssqldriver = 'ODBC Driver 11 for SQL Server'; 在新服务器上,旧的 sqlsrv 驱动程序无法连接。这为我节省了很多时间。谢谢!【参考方案3】:

想通了。很简单:

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

【讨论】:

【参考方案4】:

这对我有用,在这种情况下是远程连接: 注意:端口对我很重要

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

【讨论】:

【参考方案5】:
$servername = "";
$username = "";
$password = "";
$database = "";
$port = "1433";
try 
    $conn = new PDO("sqlsrv:server=$servername,$port;Database=$database;ConnectionPooling=0", $username, $password,
        array(
            PDO::ATTR_PERSISTENT => true,
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
        )
    );
 catch (PDOException $e) 
    echo ("Error connecting to SQL Server: " . $e->getMessage());

【讨论】:

【参考方案6】:
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();


【讨论】:

以上是关于使用 SQL Server Driver 通过 PDO 连接到 SQL Server的主要内容,如果未能解决你的问题,请参考以下文章

odbc sql server driver 通讯链路故障

[Microsoft][ODBC SQL Server Driver]超时已过期

Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server不存在或访问被拒绝

Perl DBI / MS ODBC Driver (LinuxL:RHEL) / SQL-Server:如何插入/更新 BLOB varbinary(max) 数据?

(转) java 通过 jdbc 链接 ms sql server 中出现 "no suitable driver for ..."

喜大普奔,微软Microsoft JDBC Driver For SQL Server已发布到maven中央仓库