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