PDO和SQL Server使用SQL Server Auth而不是Windows Auth

时间:2013-01-17 20:58:56

标签: php sql-server sql-server-2008 authentication pdo

我的环境:
- Windows Server 2008 R2 - Apache Webserver。
- PHP 5.4.7

我刚刚下载并安装了适用于SQL Server的Microsoft Drivers 3.0 for PHP 我已经包含了#34; php_pdo_sqlsrv_54_ts.dll"进入php。

Microsoft已经在驱动程序中包含了一个有用的chm文件(SQLSRV_Help.chm)。

在此帮助文件中,有一个使用Windows身份验证的PDO示例:

/* Connect using Windows Authentication. */
try {
  $conn = new PDO("sqlsrv:server=$serverName ; Database=AdventureWorks", "", "");
  $conn->setAttribute( PDO::ATTR ERRMOE, PDO::ERRMODE EXCEPTION );
}

但我必须使用SQL Server身份验证连接到我们的MS SQL Server 2008 R2!

连接到SQL Server

之间有什么区别
  1. 使用PDO和Windows身份验证
  2. 使用PDO和SQL Server身份验证
  3. 它只是连接字符串吗?我必须写:

    $conn = new PDO("sqlsrv:server=$serverName; Database=AdventureWorks; UID=sa; PWD=abc");
    

    或者我必须写:

    $conn = new PDO("sqlsrv:server=$serverName; Database=AdventureWorks; User Id=sa; password=abc");
    

    提前致谢

    更新

    我找到了资源:

    http://www.connectionstrings.com/sql-server-2008

1 个答案:

答案 0 :(得分:3)

构造函数中有可选的第二个和第三个参数,用于指定用户名和密码as described here

  

PDO :: __ construct

     

创建与SQL Server数据库的连接。

     

语法PDO :: __ construct($ dsn [,$ username [,$ password   [,$ driver_options]]])

     

参数

     

$ dsn:包含前缀名称(总是sqlsrv)的字符串,冒号,   和Server关键字。例如" sqlsrv:server =(local)"。您可以   可选择指定其他连接关键字请参见连接选项   有关Server关键字和其他连接的说明   关键字。整个$ dsn都是引号,所以每个连接   关键字不应单独引用。

     

$ username:可选。包含用户姓名的字符串。至   使用SQL Server身份验证连接,指定登录ID。至   使用Windows身份验证连接,指定""。

     

$ password:可选。包含用户密码的字符串。至   使用SQL Server身份验证连接,指定密码。至   使用Windows身份验证连接,指定""。

     

[...]

这意味着您可以使用PDO + SQL身份验证连接到SQL Server,如下所示:

$conn = new PDO(
    "sqlsrv:server=$serverName ; Database=AdventureWorks",
    "sa",
    "strong password"
);

connection options section还提到您在使用PDO_SQLSRV时无法在连接字符串中使用UIDPWD参数。