PHP PDO保持获取错误:Charset = UTF8:在dsn字符串中指定了无效的关键字字符集

时间:2013-09-22 20:33:16

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

我一直收到此错误: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都没有为我工作.. 那我该怎么办请帮帮我..

2 个答案:

答案 0 :(得分:4)

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

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

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

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

答案 1 :(得分:0)

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

$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();
}