使用SQL Server驱动程序通过PDO连接到SQL Server

36

我正在尝试使用Microsoft提供的驱动程序,通过PDO连接到现有的SQL Server数据库。

我看过使用ODBC、DBLIB、MSSQL等的示例,但我认为这些驱动程序的连接字符串应该使用'sqlsrv'?

是否有任何好的示例可以正确地完成这个任务?如果我应该通过其他方法来完成这个任务,请告诉我。谢谢!

6个回答

67

PDO的最大好处就是它非常容易访问任何数据库。只要你安装了这些驱动程序,你就可以轻松地这样做:

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

我需要在服务器上启用哪些驱动程序?仅启用pdo_odbc是否足够? - Ahmad

12

请注意,根据我的经验和其他人的经验(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);

请问您能否帮我查看一下与此相关的问题:http://serverfault.com/questions/722670/s1090unixodbcdriver-managerinvalid-string-or-buffer-length。谢谢! - Marco Marsala
这对我来说用花括号不起作用。将其设置为 $mssqldriver = 'ODBC Driver 11 for SQL Server'; 很好用。 - Jeff Puckett
在新服务器上,旧的sqlsrv驱动程序无法连接。这节省了我很多时间。谢谢! - Jeff Bluemel

9
这对我很有效,在这种情况下是远程连接: 注意:端口对我很重要。
$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);
} 

8
我已经理解了。非常简单:

找到解决方案,非常简单:

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

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

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

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接