header('Content-type:text/html;Charset=utf8'); class_exists('PDO') || die('PDO module is not exists!'); $conf = array( 'type' => 'mysql', 'host' => '127.0.0.1', 'user' => '', 'pwd' => '', 'port' => 3306, 'dbname' => '' ); $dsn = $conf['type'].':host='.$conf['host'].';port='.$conf['port'].';dbname='.$conf['dbname'].'charset=utf8'; try{ $dbh = new PDO($dsn, $conf['user'], $conf['pwd'],array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING)); } catch (PDOException $e){ die('Connection failed:' . $e->getMessage()); } $dhb->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); //使用mysql server预处理 $dbh->exec('SET NAMES utf8');
PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING 异常处理能有效发现问题
使用 try catch 能捕捉数据库连接异常
注意事项: mysql配置项统一设置utf8编码,否则$e->getMessage()会乱码 default-character-set=utf8 character-set-server=utf8 配置好后要重启mysql
更新:
$dsn 添加charset=utf8编码;
设置PDO::ATTR_EMULATE_PREPARES为false,不使用php本地的预处理机制,使用mysql server端的预处理机制。加强安全。
2017年7月17日22:06:39
参考:http://www.jb51.net/article/56612.htm
来自ansion博客
2017年6月25日