【问题标题】:PHP PDO Keep Getting Error: Charset=UTF8 : An invalid keyword charset was specified in the dsn stringPHP PDO 不断出现错误:Charset=UTF8:在 dsn 字符串中指定了无效的关键字字符集
【发布时间】:2013-09-27 17:07:26
【问题描述】:

我不断收到此错误:PHP PDO : Charset=UTF8 : An invalid keyword charset was specified in the dsn string.

我的代码是这样的

function ConnectToSQLAndGetDBConnSTRVar() {
    try {
    $dbname = "irina";
    $serverName = ".\SQLEXPRESS";  
    $username = "USERNAME";
    $pw = "PASSWORD"; 
    $dbh = new PDO ("sqlsrv:server=$serverName;Database=$dbname;charset=utf8","$username","$pw");
    return $dbh;
    } 
    catch (PDOException $e) {
    print "Failed to get DB handle: " . $e->getMessage() . "\n";
    exit;
    }    
}

不管我如何写 utf8.. UTF8 或 UTF-8 或 utf-8 它们都不适合我.. 那我该怎么办,请帮帮我..

【问题讨论】:

  • 您真的在这里显示您的登录信息吗? ;)
  • @djot 很好发现。不过,它是一个本地 SQL Express 服务器,所以大概只是开发工具包。
  • 正如 IMSoP 所说的那样,它是一个本地服务器.. 所以没关系,我会更改那个简单的密码..

标签: php sql utf-8 pdo character-encoding


【解决方案1】:

您可以在DSN字符串on this page of the PHP manual中找到接受的参数。

“SQL Server”PDO 驱动程序的 DSN 中没有 Charset 参数(DSN 前缀为 sqlserv:)。

请记住,所有 PDO 驱动程序都有不同的 DSN 约定,因为它们直接传递给驱动程序而不是由 PDO 规范化。

有一个用于 SQL Server 的替代 PDO 驱动程序,称为“PDO_DBLIB”,does take charset as a DSN parameter,但它具有前缀“sybase:”、“mssql:”或“dblib:”,具体取决于编译选项。

【讨论】:

  • 对不起。完全误读了。删除了我明显错误的评论。
  • 嘿,你能帮我看看如何在我的 IIS 本地服务器上安装它吗?我从这里pecl.php.net/package/PDO_DBLIB 下载了一个 tgz 文件,但我不知道如何在我的 IIS 本地服务器上安装它..
  • 内置 SQL Server 驱动程序默认使用 UTF-8。无需安装其他驱动程序即可使用 UTF-8,也无需首先指定编码,除非您使用的不是 UTF-8。
【解决方案2】:

我在遵循here 的说明以防止 sql 注入时遇到了同样的错误 阅读manual - 据说在 php 5.3.6 之前的字符集被忽略了,你可以使用它包括选项:

$dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname;
// Set options
$options = array(
    PDO::ATTR_PERSISTENT    => true,//can help to improve performance
    PDO::ATTR_ERRMODE       => PDO::ERRMODE_EXCEPTION, //throws exceptions whenever a db error occurs
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES uft8'  //>= PHP 5.3.6
);

try {
    $this->conn = new PDO($dsn, $this->user, $this->pass, $options);
}
catch ( PDOException $e ) {

    $this->error = $e->getMessage();
}

【讨论】:

    猜你喜欢
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    • 2013-11-10
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    • 2012-01-19
    相关资源
    最近更新 更多