1

こんにちは、PDO 接続でアクセントを表示する際に問題があります。私はウェブ開発でphpを学んでおり、mysqlの古いphp接続を使用して開発を開始しました

function db_connect()
{
   $result = new mysqli('localhost', 'database', 'password', 'user'); 
   if (!$result)
     return false;
   return $result;
}

私のテーブルは latin1 と utf8 文字セットを使用しており、Web ページは正常に機能し、アクセント付きの単語が表示されます。

古い方法で動作するため、文字セットと照合が問題ないことはわかっています。しかし、PDO を使用しようとすると、アクセントのあるすべての単語が異なって表示されます。カテゴリ名を取得する例を次に示します

$db = database_connect();
$query = " select xxx from yyy where xxxyid = :xxxyid ";  
$query_params = array( 
    ':xxxyid' => $xxxyid
    );
// Execute the query against the database 
$query = $db->prepare($query);
$result = $query->execute($query_params); 
if (!$result) 
  trigger_error('Query failed: ' . mysql_error(), E_USER_ERROR); 
$num_xxx = $query->rowCount();
if ($num_xxxs == 0)
  return false;  
$row = $query->fetch();
return $row['name'];

私の接続はこのように設定されています

$db_options = array( 
    PDO::ATTR_EMULATE_PREPARES => false                     // important! use actual prepared statements (default: emulate prepared statements) 
    , PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION           // throw exceptions on errors (default: stay silent) 
    , PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC      // fetch associative arrays (default: mixed arrays) 
); 
$database = new PDO('mysql:host=server;dbname=dbname;charset=utf8', 'user', 'password', $db_options);    // important! specify the character encoding in the DSN string, don't use SET NAMES
// create prepared statement with one parameter for the category ID 

アクセント付きの文字を表示する方法を検索しようとしていますが、解決できません。

4

2 に答える 2

0

あなたが投稿した同じリンクで解決策を見つけました。このソリューションは私のために働いています:

http://forums.devshed.com/php-faqs-stickies/938827-pdo-security-php-5-3-6-a-post2851557.html#post2851557

function db_connect()
{
   $result = new mysqli('localhost', 'database', 'password', 'user'); 
   if (!$result) {
       return false;
   }
   if (!$result->set_charset("utf8")) { 
       printf("Error loading character set utf8: %s\n", $result->error); exit();
   } else { 
       printf("Current character set: %s\n", $result->character_set_name()); 
   }
   return $result;
}
于 2019-03-28T16:40:28.993 に答える
-1

私の解決策は完全に異なっていました。PDOなどに新しいオプションがなければ....私の問題は、phpadminまたはスクリプトを介してdbに値を入力したときに、常にこの種の問題があったことでした。しかし、表計算ソフトで db テーブルを埋めてから、埋められたファイルを db にインポートすると、問題は解決しました。この知識は、ライブのほぼ1日を費やしました。それが役に立てば幸い。私の英語で申し訳ありません、私はスロバキア人です。

于 2015-07-21T11:54:07.700 に答える