亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

PHPPDO:字符集,設置名稱?

PHPPDO:字符集,設置名稱?

江戶川亂折騰 2019-07-02 16:36:07
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));
查看完整描述

4 回答

?
汪汪一只貓

TA貢獻1898條經驗 獲得超8個贊

將它放在連接字符串中,如下所示:

"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");


查看完整回答
反對 回復 2019-07-02
?
函數式編程

TA貢獻1807條經驗 獲得超9個贊

在PHP 5.3.6之前,Charset選項被忽略了。如果您運行的PHP版本較早,您必須這樣做:

<?php

    $dbh = new PDO("mysql:$connstr",  $user, $password);

    $dbh -> exec("set names utf8");?>


查看完整回答
反對 回復 2019-07-02
?
繁星點點滴滴

TA貢獻1803條經驗 獲得超3個贊

這可能是最優雅的做法。
就在PDO構造函數調用中,但避免使用bug字符集選項(如上所述):

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

對我很有用。


查看完整回答
反對 回復 2019-07-02
?
侃侃爾雅

TA貢獻1801條經驗 獲得超16個贊

為了完整起見,實際上從PDO連接到MySQL時設置編碼的方法以及可用的編碼方式取決于PHP版本。優先次序是:

  1. charset

    參數在DSN字符串中。
  2. SET NAMES utf8

    帶著

    PDO::MYSQL_ATTR_INIT_COMMAND

    連接選項
  3. SET NAMES utf8

    手動

此示例代碼實現了這三種方法:

<?php

define('DB_HOST', 'localhost');define('DB_SCHEMA', 'test');define('DB_USER', 'test');define('DB_PASSWORD', 'test');define('DB_ENCODING', 'utf8');$dsn = 'mysql:host=' . DB_HOST . ';dbname=' . DB_SCHEMA;$options = array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,);if( version_compare(PHP_VERSION, '5.3.6', '<') ){
    if( defined('PDO::MYSQL_ATTR_INIT_COMMAND') ){
        $options[PDO::MYSQL_ATTR_INIT_COMMAND] = 'SET NAMES ' . DB_ENCODING;
    }}else{
    $dsn .= ';charset=' . DB_ENCODING;}$conn = @new PDO($dsn, DB_USER, DB_PASSWORD, $options);if( version_compare(PHP_VERSION, '5.3.6', '<') && !defined('PDO::MYSQL_ATTR_INIT_COMMAND') ){
    $sql = 'SET NAMES ' . DB_ENCODING;
    $conn->exec($sql);}

做這三件事可能是過分的(除非您正在編寫您計劃分發或重用的類)。


查看完整回答
反對 回復 2019-07-02
  • 4 回答
  • 0 關注
  • 897 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號