iT邦幫忙

0

mysql php pdo 無法查詢中文資料

這是我的PDO function

問題敘述:

php版本為5.3.3

使用google瀏覽器的狀況:

1.查詢英文數字都很正常
2.查詢中文就會顯示 Successfully but no result ,sql語法顯示正常

使用IE瀏覽器的狀況
1.查詢英文資料都很正常
2.查詢'路過'的話 sql 語法會變成查詢 '˜H‰ß'

上網爬了兩個方法

使用google瀏覽器的狀況:
1.html的 meta =>utf8 這個無作用,還是一樣

2.加入$db->query("set names utf8"); =>變成整個空白

以下是我的PDO function:
程式碼php的部分

function DB($sql){
$pgdbname = "bb";
$pgdbip = "xxx.xxx.xxx.xx";
$pguser = "root";
$pgpass = "11";
$db = new PDO("mysql:dbname=$pgdbname;host=$pgdbip", $pguser, $pgpass );
$rs = $db->query($sql);
$arr = $db->errorInfo();
if ( !$rs && $arr[0] != 0) {
echo " $sql \n";
print_r($arr);
echo "";
}elseif($rs && $arr[0] == 0) {
if ($rs->rowCount() == 0) echo " Successfully but no result! ";
return $rs->fetchall(PDO::FETCH_ASSOC);
}
}

     if($_GET or $_POST){
       $onemonthago = mktime(0, 0, 0, date("m")-1, date("d"),   date("Y"));

/* Statement Box Begin /
$aid_statement=($_REQUEST[char_name])?"$_REQUEST[char_name]":"";
/
Statement Box End */
$sql = "select * from XXXXX where char_name = '$aid_statement';";

    echo $sql;
                 $rs_arr=DB($sql);


       foreach($rs_arr as $row ) {
                    $rs_row[]=$row;

            }
            $col_name=array_keys($rs_row[0]);

    }
PHP 5.3.3 (cli) (built: Mar 22 2017 12:27:09
已解決了

2 個回答

0
king742171
iT邦新手 4 級 ‧ 2017-08-10 12:01:55

PHP的話...
試試這個~

iconv('BIG5', 'utf-8', '欄位內容或變數');

參考資料:
PHP iconv()

會需要做到這一步,基本上整個編碼就是不對的囉!
通常是沒辦法需要整個網站重改變編碼才會使用這個做輸出。

另外一點,有些人新增資料庫都不看資料庫編碼。
而且以前有些服務器商預設是latin1_xxxxxxx_ci,然後可能有些人想都不想就直接新增資料庫,之後就進入了搜尋地獄……因為編碼完全不對。
這個就是連轉換big5都解不出來的了。
只能想辦法看是不是轉出正確的格式再回存。

不曉得是什麼狀況

0
bizpro
iT邦大師 1 級 ‧ 2017-08-10 19:11:20

您的PHP太舊了, 建議不要使用, 如果真要用, 請加入粗體字部份:

$db = new PDO("mysql:dbname=$pgdbname;host=$pgdbip", $pguser, $pgpass );
$db->exec("set names utf8");
...

有加入那一段過

但還是一樣 只能select到英文數字資料

換成中文就無法了

會顯示Successfully but no result!那一段

我要發表回答

立即登入回答