【问题标题】:PHP PDO : Charset=UTF8 : An invalid keyword charset was specified in the dsn stringPHP PDO : Charset=UTF8 : 在 dsn 字符串中指定了无效的关键字字符集
【发布时间】:2013-05-23 22:44:34
【问题描述】:

我正在使用 sqlsrv 驱动程序连接到带有 PDO 的 MS SQL 服务器。

PHP 版本是 5.3.24。 工作连接如下所示:

$dsny = "sqlsrv:Server=xx1;Database=xx2";
$usery = 'xx3';
$passwordy = 'xx4';
$dbhy = new PDO($dsny, $usery, $passwordy);

**

但我需要设置字符,然后我试试这个:

$dsny = "sqlsrv:Server=xx1;Database=xx2;charset=utf8";
$usery = 'xx3';
$passwordy = 'xx4';
$dbhy = new PDO($dsny, $usery, $passwordy);

当我添加字符集时,我收到此错误: “致命错误:未捕获的异常 'PDFException' 带有消息 'SQLSTATE[IMSSP]:在 dsn 字符串中指定了无效的关键字 'charset'”

那么是什么导致了这个错误呢?

根据我的阅读,我需要这样做,因为我正在运行一个新的 PHP 版本。

【问题讨论】:

  • 我尝试了 utf8、UTF8、utf-8、iso-8859-1、greek1 等。这似乎是关于“字符集”而不是我尝试设置的实际字符集.
  • sqlsrv DSN 支持这个关键字吗?
  • 你是对的。这不是要走的路。我正在寻找设置字符的解决方案。

标签: php sql character-encoding pdo


【解决方案1】:

连接后需要应用属性:

$dbhy->setAttribute(PDO::SQLSRV_ATTR_ENCODING, PDO::SQLSRV_ENCODING_UTF8);

见:https://msdn.microsoft.com/en-us/library/ff628157(v=sql.105).aspx

【讨论】:

  • 很好的答案。但是,我已经在 setAttribute 中有两个参数,并且也想添加这些参数。由于只允许使用 2 个参数,如何将这两个与我已有的添加? $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION)
  • 您只需添加另一个带有另一个参数的“setAttribute”行。
猜你喜欢
  • 2013-09-27
  • 1970-01-01
  • 2016-11-21
  • 1970-01-01
  • 2011-04-24
  • 2013-11-10
  • 2010-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多