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に切り替えても何も変わりません。