6

PHP を使用して一部のデータを解析し、それを MySQL に入れています。êm-Khêただし、データにMySQLのような特殊文字が含まれている場合、次のエラーが出力されます:

SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xEAm-Kh\xEA...'

テストした後、MySQL は問題ではありません。(テーブルと列の照合は です) その文字列をテーブルに直接 (手動で) utf8_general_ciINSERTすると、テーブルに入ります。êm-Khêしたがって、MySQL はそのデータを受け入れることができます。

PHPレベルでこのエラーが発生する理由は何ですか?

エンコードの知識がよくわかりません。

  • クエリでê変換されるのはなぜですか?\xEA

のようなデータを取得した場合、変更êされていないので、どうすればデータベースに入れることができêますか?

4

3 に答える 3

3

したがって、問題は、データベース接続が UTF8 ではなく、おそらく LATIN1 であるため、データベースに接続した後にPHP の関数を使用するかutf8_encode()、実行する必要があることです。SET NAMES utf8

$handle = new PDO("mysql:host=localhost;dbname=dbname",
'username', 'password',
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

このスレッドには、いくつかの良い参照と説明があります

于 2012-10-05T05:43:07.253 に答える
0

私の推測では、PHP と MySQL の間にエンコーディングの不一致があると思われます。êは実際には に「変換」され\xEAていません。MySQL はバイト シーケンスがどうあるべきかを認識していないEAため、生のバイトが間違っていると不平を言うだけです。まず、PHP で文字列がどのエンコーディングに含まれているかを知る必要があります。どこから来たかによって異なります。次に、正しい MySQL 接続エンコーディングを設定する必要があります。これにより、MySQL は、送信する文字列のエンコーディングを認識します。その方法は、データベースへの正確な接続方法によって異なります。

プロセス全体の概要については、Web アプリでの Unicode の前面から背面への処理を参照してください。

于 2012-10-05T05:43:02.780 に答える
-1

この機能を使用できます。mysql_real_escape_string($user), mysql_real_escape_string($password));

于 2013-03-01T14:17:26.927 に答える