0

我不断收到此错误:PHP PDO:Charset=UTF8:在 dsn 字符串中指定了无效的关键字字符集。

我的代码是这样的

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 它们都不适合我。所以我该怎么办,请帮助我。

4

2 回答 2

4

您可以在 PHP 手册的这一页上找到 DSN 字符串中接受的参数。

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

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

有一个用于 SQL Server 的替代 PDO 驱动程序,称为“PDO_DBLIB”,它确实将 charset 作为 DSN 参数,但它具有前缀“sybase:”、“mssql:”或“dblib:”,具体取决于编译选项。

于 2013-09-22T20:35:27.173 回答
0

在遵循此处的说明 以防止 sql 注入阅读手册时,我遇到了同样的错误-据说在 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();
}
于 2014-01-31T08:06:45.257 回答