2013-09-22 57 views
0

我不断收到此错误:PHP PDO:Charset = UTF8:在dsn字符串中指定了无效的关键字字符集。PHP PDO保持错误:字符集= 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或UTF8或UTF8他们没有为我工作.. 所以,我该怎么办,请帮助我..

+0

你真的在这里显示你的登录信息吗? ;) – djot

+0

@djot很好发现。这是一个本地的SQL Express服务器,但大概只是开发工具包。 – IMSoP

+0

由于IMSoP说它是一个本地服务器..所以它并不重要,而且我会改变那个简单的密码。 –

回答

4

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

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

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

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

+0

对不起。完全误解了。删除了我明显错误的评论。 – Mark

+0

嘿,你能帮我解释一下如何在我的IIS本地服务器上安装它吗?我从这里下载http://pecl.php.net/package/PDO_DBLIB一个tgz文件,我不知道如何在我的IIS本地服务器上安装这个.. –

+2

内置的SQL Server驱动默认使用UTF-8 。为了使用UTF-8,不需要安装其他驱动程序,也不需要首先指定编码,除非您使用UTF-8以外的其他驱动程序。 – cHao

0

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