1

utf8 エンコーディングを使用してデータベースでクエリを実行する際に問題が発生しています。特殊文字を含む文字列を試すまで、すべて正常に機能します。既存の prestashop テンプレートに別のページをいくつか追加しているので、データベースに多くの変更を加えることができません。

これは私のコードです (申し訳ありませんが、一部はルーマニア語です)

$acces_server=mysql_connect($db_host, $db_user, $db_pass);
    if(!$acces_server) die ("Server-ul nu este disponibil momentan !");
    mysql_set_charset('utf8');
     echo mysql_client_encoding();

$acces_bd = mysql_select_db($db_name);
    if (!$acces_bd) die ("Ne pare rau, dar baza de date nu poate fi accesata momentan !");
mysql_query('SET NAMES utf8') or die(mysql_error());
mysql_query('SET CHARACTER SET utf8') or die(mysql_error());
mysql_query('SET COLLATION_CONNECTION="utf8_general_ci" ') or die(mysql_error());

このようなクエリを作成しようとすると、0 行が取得されます。

$experienta= $_GET['name'];
$rez=mysql_query("SELECT nume_cutie FROM rez_experiente WHERE nume = '".$experienta."'"); 

エコーを使用してクエリを表示し、それを phpMyAdmin に入力したところ、うまくいきました。また、ヘッドセクションには次の行があります:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

他に何をすべきか本当にわかりません。これまでに見つけたすべての解決策はうまくいかないようです。代わりに mysqli を使用してみましたが、結果は同じでした。私を助けてください、そしてあなたの時間をありがとう。

*編集 mysqli で stmt->prepare を使用しようとしましたが、うまくいきませんでした。私もこれをやってみました:

$experienta2=str_replace("?","%",utf8_decode($experienta));
        $rez=mysql_query("SELECT nume_cutie FROM rez_experiente WHERE nume LIKE '".$experienta2."'"); 

これは次のようになります。

SELECT nume_cutie FROM rez_experiente WHERE nume LIKE '5th Avenue Beauty Center  - Răsfăţ'

これに:

SELECT nume_cutie FROM rez_experiente WHERE nume LIKE '5th Avenue Beauty Center - R%sf%%'

また、クエリはphpMyAdminで機能しますが、mysql_query()は何も返しません。utf8_unicode_ciに切り替えても何も変わりません。

4

1 に答える 1

0

データベース接続後、次のクエリを実行します。

SET character_set_client=utf8;
SET character_set_connection=utf8;
SET character_set_database=utf8;
SET character_set_results=utf8;
SET character_set_server=utf8;
于 2012-09-21T15:38:11.817 に答える