【问题标题】:PHP-PDO error: An invalid keyword 'host' was specified in the DSN stringPHP-PDO 错误:在 DSN 字符串中指定了无效的关键字“主机”
【发布时间】:2015-08-25 20:06:31
【问题描述】:

尝试连接到 smarterasp.net dns 上的 mssql 服务器,但到目前为止没有成功。与驱动程序有一个先前的问题。安装它们并且它们运行良好(在 php.ini 中添加它们)

使用 php version:5.6,将以下内容添加到 php.ini 以使 php-pdo-mssql 工作:

  • extension=php_pdo_sqlsrv_56_nts.dll
  • extension=php_pdo_sqlsrv_56_ts.dll
  • extension=php_sqlsrv_56_nts.dll
  • extension=php_sqlsrv_56_ts.dll

到目前为止我对这段代码做了什么:

<?php
 try {
     $conn = new PDO("sqlsrv:host=host_name_string;dbname=database_name_string", "username_string", "password_string");

     // set the PDO error mode to exception
     $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     echo "Connected successfully"; 
 }
 catch(PDOException $e)
 {
     echo "Connection failed: " . $e->getMessage();
 }

?>
  • 我放了数据库而不是 dbname,但它不起作用
  • 我放的是数据库而不是 dbname,它不起作用
  • 我在主机名示例后面添加了1433端口:

"sqlsrv:host=host_name_string,1433;Database=database_name_string"

没用

  • 我是这样在主机名例子后面加了1433端口的

"sqlsrv:host=host_name_string;port=1433;Database=database_name_string"

没用

我已经测试了与我的 SQL 服务器管理工​​作室的连接和给定的数据(我在这里用作参数的值是 100% 好的)

我还有哪些其他选择?

【问题讨论】:

  • 试试这个格式$conn = new PDO("sqlsrv:Server=localhost;Database=testdb", "UserName", "Password");
  • 我试过了,但这说明如下:此扩展需要 Microsoft ODBC Driver 11 for SQL Server 才能与 SQL Server 通信,老实说,我认为我不应该安装其他东西。 . 或者我应该?
  • 我认为您没有其他选择——但之前从未使用过 MS 服务器
  • 我认为您是对的,如果可行,我会这样做,然后将其发布为答案,我会接受。

标签: php sql-server pdo


【解决方案1】:

正确的连接格式是:

$conn = new PDO("sqlsrv:Server=localhost;Database=testdb", "UserName", "Password"); 

来自手册页:PDO_SQLSRV DSN

【讨论】:

  • 感谢这个不明显的语法。我在我的 linux 服务器上使用$conn = new PDO ("dblib:host=$srv_host:$srv_port;dbname=$srv_dbname", "$srv_username", "$srv_password"); 进行相同的连接,并且不会认为我需要更改 this,因为我认为它是由 PDO 抽象的。
猜你喜欢
  • 2013-05-23
  • 2013-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-16
  • 2013-07-12
  • 1970-01-01
相关资源
最近更新 更多