- ベストアンサー
PHPでMySQLを更新する方法
- SQLを勉強しようと思い、本を見ながらやっているのですが、入力する文字が全て半角でないとPHPで正常に登録できません。
- PHPを使用してMySQLを更新する際に、全角文字を入力するとエラーが発生します。
- プログラム中の「query」関数を使用することで、MySQLにデータを登録することができます。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
データベースにconnectした直後、insertを実行する前に $sql = "set names sjis"; $result = query($sql, $con); のようにすればよいと思います。 試してみてください。
その他の回答 (4)
- asuncion
- ベストアンサー率33% (2127/6289)
php.iniの件です。 > ;mbstring.language = Japanese > ;mbstring.internal_encoding = EUC-JP > ;mbstring.http_input = auto > ;mbstring.http_output = SJIS > ;mbstring.encoding_translation = Off > ;mbstring.detect_order = auto > ;mbstring.substitute_character = none; 上記の設定項目がすべてコメントになっていますね。 お使いの環境に応じた内容を明示的にセットする方がよいと思います。 (私の手元にある)書籍などの情報によりますと、phpスクリプトの文字コードは EUC-JPが望ましいとされています。シフトJISだと、ブラウザへの 出力が文字化けしてしまうなどの問題が起こりうるためです。 書かれたスクリプトをすべてEUC-JPに変更できればよいのですが、 そうもいかない場合、以下のように設定する必要があると思います。 各項目は、先頭のセミコロンを削除して、活かしてください。 mbstring.language = Japanese mbstring.internal_encoding = SJIS mbstring.http_input = auto mbstring.http_output = SJIS mbstring.encoding_translation = On mbstring.detect_order = auto mbstring.substitute_character = none; それから、マルチバイト文字列の件とは別に、もう一点 default_charset = "Shift_JIS" にしておいてみてください。 php.iniを変更したら、忘れずにApacheをリスタートしてください。 これでうまくいけばよいのですが、もしもうまくいかない場合は、 データベースへの接続直後に "set names sjis" というクエリーを実行してみてください。
補足
度々の回答ありがとうございます。 mbstrinの件ですが、下記の通り有効にしてみました。 [mbstring] ; language for internal character representation. mbstring.language = Japanese ; internal/script encoding. ; Some encoding cannot work as internal encoding. ; (e.g. SJIS, BIG5, ISO-2022-*) ;mbstring.internal_encoding = EUC-JP mbstring.internal_encoding = SJIS ; http input encoding. mbstring.http_input = auto ; http output encoding. mb_output_handler must be ; registered as output buffer to function mbstring.http_output = SJIS ; enable automatic encoding translation according to ; mbstring.internal_encoding setting. Input chars are ; converted to internal encoding by setting this to On. ; Note: Do _not_ use automatic encoding translation for ; portable libs/applications. ;mbstring.encoding_translation = Off mbstring.encoding_translation = On ; automatic encoding detection order. ; auto means mbstring.detect_order = auto ; substitute_character used when character cannot be converted ; one from another mbstring.substitute_character = none; ; overload(replace) single byte functions by mbstring functions. ; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(), ; etc. Possible values are 0,1,2,4 or combination of them. ; For example, 7 for overload everything. ; 0: No overload ; 1: Overload mail() function ; 2: Overload str*() functions ; 4: Overload ereg*() functions mbstring.func_overload = 0 dfault_charset も下記のようにあわせてみました。 ;default_charset = "iso-8859-1" default_charset = "Shift_JIS" 残念ながら上手くいきませんでした。また、最後に教えていただいている"set names sjis"はどのように記述すれば良いでしょうか?”mysql_connect”のあとに書いてみたら全然違うエラーが出たのでこんな記述方法ではないのだろうとわかりましたが。 申し訳ないです、ど素人な質問で。
- asuncion
- ベストアンサー率33% (2127/6289)
まずはこちらの件から。 > [mysqld] > default-character-set=sjis 承知しました。データベースの文字コードはシフトJISである、ということですね。 > 文字コードはshift-jisだと思いますが、 > 上記の”Insert”文の数行後に下記のように記述してあります> (本の例題のまま)。ここだと遅いのでしょうか? スクリプトの編集に使われているソフトウェアに文字コード切り替え機能がなければ、 おそらくはシフトJISでしょうね。 また、<head>タグで始まるその4行は、一般にはhtmlファイルやphpスクリプトの 先頭部分に書くものだと思うのです。 insert文の後に書いてあるとのことで、スクリプトがどういった構成になっているかが よくわからなくなりました。
- asuncion
- ベストアンサー率33% (2127/6289)
#1の者です。 phpの設定ファイル"php.ini"の[mbstring]セクションに書いてある、 「mbstring.何とか」という複数項目の設定内容も教えてください。
補足
php.iniには下記のように記述されています。 [mbstring] ; language for internal character representation. ;mbstring.language = Japanese ; internal/script encoding. ; Some encoding cannot work as internal encoding. ; (e.g. SJIS, BIG5, ISO-2022-*) ;mbstring.internal_encoding = EUC-JP ; http input encoding. ;mbstring.http_input = auto ; http output encoding. mb_output_handler must be ; registered as output buffer to function ;mbstring.http_output = SJIS ; enable automatic encoding translation according to ; mbstring.internal_encoding setting. Input chars are ; converted to internal encoding by setting this to On. ; Note: Do _not_ use automatic encoding translation for ; portable libs/applications. ;mbstring.encoding_translation = Off ; automatic encoding detection order. ; auto means ;mbstring.detect_order = auto ; substitute_character used when character cannot be converted ; one from another ;mbstring.substitute_character = none;
- asuncion
- ベストアンサー率33% (2127/6289)
MySQLの設定ファイル"my.ini"の[mysqld]セクションで、 default-character-set の設定はどうなっていますか? また、くだんのphpスクリプトの文字コードは何でしょうか?
補足
my.iniには下記と記されています。 [mysqld] default-character-set=sjis 文字コードはshift-jisだと思いますが、上記の”Insert”文の数行後に下記のように記述してあります(本の例題のまま)。ここだと遅いのでしょうか? <html> <head> <meta http-equiv="Content-Language" content="ja"> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
お礼
ありがとうございました!無事に出来ました。連休最後にして解決してスッキリしました。