PHPPDO:字符集,设置名称?

PHPPDO:字符集,设置名称?

我以前在正常的MySQL_*连接中有过这样的情况:

mysql_set_charset("utf8",$link);mysql_query("SET NAMES 'UTF8'");

我需要它吗?我应该把它放在哪里?

$connect = new PDO("mysql:host=$host;dbname=$db", $user, $pass, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));


江户川乱折腾
浏览 859回答 4
4回答

汪汪一只猫

将它放在连接字符串中,如下所示:"mysql:host=$host;dbname=$db;charset=utf8"但是,在PHP 5.3.6之前,Charset选项被忽略了。如果您运行的PHP版本较早,您必须这样做:$dbh = new PDO("mysql:$connstr",  $user, $password);$dbh->exec("set names utf8");

函数式编程

在PHP 5.3.6之前,Charset选项被忽略了。如果您运行的PHP版本较早,您必须这样做:<?php &nbsp;&nbsp;&nbsp;&nbsp;$dbh&nbsp;=&nbsp;new&nbsp;PDO("mysql:$connstr",&nbsp;&nbsp;$user,&nbsp;$password); &nbsp;&nbsp;&nbsp;&nbsp;$dbh&nbsp;->&nbsp;exec("set&nbsp;names&nbsp;utf8");?>

繁星点点滴滴

这可能是最优雅的做法。就在PDO构造函数调用中,但避免使用bug字符集选项(如上所述):$connect&nbsp;=&nbsp;new&nbsp;PDO( &nbsp;&nbsp;"mysql:host=$host;dbname=$db",&nbsp; &nbsp;&nbsp;$user,&nbsp; &nbsp;&nbsp;$pass,&nbsp; &nbsp;&nbsp;array( &nbsp;&nbsp;&nbsp;&nbsp;PDO::ATTR_ERRMODE&nbsp;=>&nbsp;PDO::ERRMODE_EXCEPTION, &nbsp;&nbsp;&nbsp;&nbsp;PDO::MYSQL_ATTR_INIT_COMMAND&nbsp;=>&nbsp;"SET&nbsp;NAMES&nbsp;utf8" &nbsp;&nbsp;));对我很有用。

侃侃尔雅

为了完整起见,实际上三从PDO连接到MySQL时设置编码的方法以及可用的编码方式取决于PHP版本。优先次序是:charset参数在DSN字符串中。跑SET NAMES utf8带着PDO::MYSQL_ATTR_INIT_COMMAND连接选项跑SET NAMES utf8手动此示例代码实现了这三种方法:<?php define('DB_HOST',&nbsp;'localhost');define('DB_SCHEMA',&nbsp;'test');define('DB_USER',&nbsp;'test');define('DB_PASSWORD',&nbsp;'test');define('DB_ENCODING',&nbsp;'utf8');$dsn&nbsp;=&nbsp;'mysql:host='&nbsp;.&nbsp;DB_HOST&nbsp;.&nbsp;';dbname='&nbsp;.&nbsp;DB_SCHEMA;$options&nbsp;=&nbsp;array( &nbsp;&nbsp;&nbsp;&nbsp;PDO::ATTR_ERRMODE&nbsp;=>&nbsp;PDO::ERRMODE_EXCEPTION,);if(&nbsp;version_compare(PHP_VERSION,&nbsp;'5.3.6',&nbsp;'<')&nbsp;){ &nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;defined('PDO::MYSQL_ATTR_INIT_COMMAND')&nbsp;){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$options[PDO::MYSQL_ATTR_INIT_COMMAND]&nbsp;=&nbsp;'SET&nbsp;NAMES&nbsp;'&nbsp;.&nbsp;DB_ENCODING; &nbsp;&nbsp;&nbsp;&nbsp;}}else{ &nbsp;&nbsp;&nbsp;&nbsp;$dsn&nbsp;.=&nbsp;';charset='&nbsp;.&nbsp;DB_ENCODING;}$conn&nbsp;=&nbsp;@new&nbsp;PDO($dsn,&nbsp;DB_USER,&nbsp;DB_PASSWORD,&nbsp;$options);if(&nbsp;version_compare(PHP_VERSION,&nbsp;'5.3.6',&nbsp;'<')&nbsp;&&&nbsp;!defined('PDO::MYSQL_ATTR_INIT_COMMAND')&nbsp;){ &nbsp;&nbsp;&nbsp;&nbsp;$sql&nbsp;=&nbsp;'SET&nbsp;NAMES&nbsp;'&nbsp;.&nbsp;DB_ENCODING; &nbsp;&nbsp;&nbsp;&nbsp;$conn->exec($sql);}做这三件事可能是过分的(除非您正在编写您计划分发或重用的类)。
打开App,查看更多内容
随时随地看视频慕课网APP