• ベストアンサー
  • すぐに回答を!

MySQLへデータ入力時の文字化け

PHPで作成したWEBページでMySQLのデータを更新すると、特定文字のみ文字化けします。 現在、発見されているのは”予定”という文字です。 文字化けすると”嵐閨”という文字になります。 サーバ環境はLinuxFedoraCore3、Apache2.0.52、PHP4.3.11、MySQL4.1.10です。 phpMyAdminから同じテーブルへ”予定”という文字を入力すると、問題なく表示されています。 PHPで作成したコマンド・コードが悪いのではなく、 httpd.confやphp.iniの設定が悪いように思うのですが、何が悪いのか分かりません。 このような症状についてご存知でしたら、ご指導願いします。

共感・応援の気持ちを伝えよう!

  • PHP
  • 回答数2
  • 閲覧数328
  • ありがとう数7

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.2
  • php504
  • ベストアンサー率42% (926/2160)

$sql全体をエスケープするのじゃなくてセットする値のみをエスケープします。 この場合は $location= mysql_escape_string($location); $color= mysql_escape_string($color); $sql = "update location_tbl set location = '$location', color = '$color'"; $resultId = mysql_query($sql); になります。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

二度にわたる親切な回答に感謝しております。 重ね重ねありがとうございます。 回答に通りに変更したところ、正常に動作いたしました。 mysql_escape_stringについて、知識がなかったものでwebで調べたところsql全体をエスケープしていたものをみたもので使い方を誤って認識していました。 まったく同じモジュールを、Windowsのwebサーバーで動かすと、問題なく動くのが不思議です。 apache、php、MySQLともほぼ同じバージョンなのですが。 apache、php、MySQL等の言語の設定かとも思い、my.cnfファイルを変えたり、データベースオープン時にmysql_set_character_setを加えたりしてみたのですが、解決できませんでした。 問題が解決できとても助かりました。 ありがとうございました。

その他の回答 (1)

  • 回答No.1
  • php504
  • ベストアンサー率42% (926/2160)

予定 97 5C 92 E8 嵐閨 97 92 E8 81 予定の予に含まれる5C(アスキー文字で\)が取り除かれたための文字化けと思われます。 MySQLに文字をinsertする前に文字をmysql_escape_string()でエスケープしてないのではないでしょうか。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

回答ありがとうございます。 おっしゃる通りの不具合でした。 「予\定」と入力すると、正常に表示されました。 mysql_escape_string()を以下のように作ってみたのですが、データの更新に失敗してしまいます。 $location = "社長室"; $color = "#FFFFFF" $sql = "update location_tbl set location = '$location', color = '$color'"; print "$sql"; $sql = mysql_escape_string($sql); print "$sql"; $resultId = mysql_query($sql); mysql_escape_string()の前後に$sqlをプリントさせたところこのようになりました。 前: update location_tbl set location = '社長室', color = '#FFFFFF' 後: update location_tbl set location = \'社長室\', color = \'#FFFFFF\' mysql_escape_string()は成功しているようなのですが、 データベースの更新に失敗している理由が分かりません。 ご指導お願いします。

関連するQ&A

  • PHPとMySQLを利用し、文字化けの問題。

    ApacheとPHPとMySQLを使って、ウェブサイトを作成する。 参考書は導入効果バツグン!PHP5.0+MySQL5.0で構築する最速Webシステムです。 この本によって、色々な設定も変更した。(php.iniの設定とhttpd.confの設定とMySQLのファイルでのmy.ini、三つとも更改した。) MySQLにはPHPMyAdminツールを利用して、データをインポートした。 現在PHPのプログラムは作成していたげと、ブラウザで示した時は文字化けという問題があった。PHPのプログラムでcharset=shift_jisも設定した。ちなみにプログラムの中で日本語を使っているので、ブラウザでも正しく示した。PHPMyAdminの中に示したいデータベースとテーブルには全部のエンコードはsjisで設定した 結局どこか間違ったところがあるので、全くわからなかった。 情報をいただければと思います。では、よろしくお願いいたします。

    • 締切済み
    • PHP
  • PHP4からPHP5にしたときのDB文字化けについて

    よろしくお願い致します。 すでに、PHP4で作っていたサイトで、DBにもいろいろと登録していたのですが、PHP5にしたい事情が出てしまい、PHP5にしました。 すると、すでに登録されていた、DBの内容が文字化けしてしまいました。 PHP4(UTF8)+MySQL5(UTF8) → PHP5(UTF8)+MySQL5(UTF8) 情報足りませんでしたら申し訳ないです、申し付けて下さい。 phpMyAdminから見たときは、すでに入っていたDBの内容は文字化けはしていないのですが… 次にPHP5で新しく登録した場合は、サイトでの表示は文字化けしないのですが、次はphpMyAdminで見ると文字化けしていました。 php.iniの設定も同じにしてます、Apacheのconf設定なども見たのですが、文字化けは解消しませんでした。 よろしくお願い致します。

    • 締切済み
    • PHP
  • mysql-phpでの文字化け

    自分のパソコンでは文字化けせず、正しく表示されているのですが、 niftyのデータサービスを使ってphpで表示すると文字化けします。 my.iniとmy.cnfの問題と思いniftyサーバーにftpで接続し探したがファイルが見つかりません。 mysqlとphpはutf8で設定しています。 niftyサーバーのmysqlは5、phpMyAdminは2,11,9です。

    • ベストアンサー
    • MySQL
  • MySQLの文字化け

    Xampp(Ver 1.6.5)、phpMyAdmin2.11.3、PHP5.25、MySQL(ver5.0.51) まだ初めたばかりなのですが、MySQLでデータベースを作って日本語の文字入力をすると文字化けしてしまいます。コマンドプロンプトでクライアント側はSJISにセットしたのですが、サーバー側の文字セットがまだlatinになったままです。サーバー側の切り替え方を教えていただけませんか。宜しくお願いします。

    • ベストアンサー
    • MySQL
  • MySQLの文字化け

    WindowsServerでPHPとMySQLで作成したプログラムを動かしています。 PHPからINSERTでMySQLに登録すると環境依存文字(「(株)・(有)など)が「?」になってしまいます。 PHPからSELECTでブラウザ上に表示させると文字化けはしていませんが、phpMyAdminで確認すると「?」になっています。 このデータベースの内容を他のサーバーに移すときに、phpMyAdminからエクスポートまたはmysqldumpすると「?」のままエクスポートして、他のサーバーでインポートしても当然「?」になってしまいます。 環境依存文字が文字化けしない、あるいは他のサーバーでも環境依存文字をそのまま移行できるようにはできないでしょうか。 よろしくお願いします。 PHPはEUC-JP、データベースはujisで作成しています。 INSERTの直前でSET NAMES UJISを実行しています。

    • ベストアンサー
    • MySQL
  • mySQL 4.0で文字化け

    はじめまして、PHP+mySQLでプログラムを勉強中の初心者です。 PHPからインサートした日本語データをphpmyadminで確認するとデータが化けています。SQL文自体をPHPで表示させると文字化けせずにちゃんと表示されます。  mySQL 4.1以降なら SET NAMESというコマンドをDB接続後に入れることで問題が回避できると言うことですが、mySQL 4.0ではコマンドエラーになってしまいます。 レンタルサーバーなので、PHPのアプリケーション側で対応できたらと考えています。 何かよい方法がないでしょうか? PHP 4.3.11は mySQL 4.0.27です。 PHPのキャラクターはutf-8, mySQLのCharactersetは latin1となっていました。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • MySQLの文字化けに関して

    MySQLとPHP、phpMyadminで開発をした際に、phpMyAdminから 登録した値が、PHPで表示させると文字化けしてしまいます。 手当たり次第環境を調べてみましたが、どうしても原因が掴め ません。 わかる方がいらしたら是非教えて下さい。 《環境》 PHP   php-5.0.2 MySQL  mysql-4.0.21 phpMyAdmin phpMyAdmin 2.7.0 です。 MySQLは、  [mysqld]   default-character-set=sjis  [mysql]   default-character-set=sjis  [mysql-dump]   default-character-set=sjis で設定してあり、 phpMyadminは、  $cfg['DefaultLang'] = 'ja-sjis'  $cfg['DefaultCharset'] = 'SHIFT_JIS' と設定してあります。 もちろんPHPも'SJIS'ですが、、、 本当に困っています。 教えてください。

    • ベストアンサー
    • MySQL
  • PHP MYSQLのインストール

    できません!。Apacheは入ったのですがPHPが反応しません。 php.ini httpd.confの構文エラーは分かっているのですが、いろんなサイトを検索すると書いてあることが違いどれを参考にしていいのか分かりません。ずばりこうしろと書いてあるサイトはありませんか? PHP5.2.55 Apache2.0.55 MYSQL4.1 windowsXP

    • 締切済み
    • PHP
  • Apache2.2での文字化けが直せません

    Apache2.2.15をインストールし、「独習PHP」に従って設定をしたのですが、日本語が文字化けします。 httpd.confで変更したのは以下の部分です。 LoadModule php5_module "c:/php/php5apache2_2.dll" Addtype application/x-httpd-php .php (AddDefaultCharsetは、調べてみた所2.2系から使われてないらしいので、追加していません) php.iniの設定も間違いなく行いました。 また、<head>内に<meta http-equiv="Content-Type" content="text/html; charset=euc">などと埋め込んだりしてもだめでした。 どうぞよろしくお願いします。

    • ベストアンサー
    • PHP
  • 文字化けについて

    phpMyAdmin上ででテーブルを作成し、データを挿入したところ、 phpMyAdmin上であれば、正常に表示されます。 しかしPHPでセレクト結果を表示したところ、 マルチバイト文字が文字化けします。 次にMySqlCommandLineClientよりデータを挿入し、 PHPでセレクト結果を表示すると文字化けはしません。 しかしphpMyAdmin上で参照すると文字化けしています。 文字設定がさっぱりわかりません....よろしくお願いします。 MySQL 4.1.7 PHP 5.02 phpMyAdmin 2.6.0

    • ベストアンサー
    • PHP