電子書籍の厳選無料作品が豊富!

SQLを勉強しようと思い、本を見ながらやっているのですが、入力する文字が全て半角でないとPHPで正常に登録できません。コマンドプロンプトから「Insert ・・・ 」と下記の通り打ち込むと問題なく登録できます。本当は下記のtest1~3は全角/半角を意識せず入力出来るようにしたいと思っています。お手数ですがご教示お願いします。

使用している環境は下記です。
WinXP HE
Mysql 5.0
php 5.2.1
Apache 2.0.46



(SQLを更新しようとしている部分 ・・・ 下記”test3”は「3」だけ全角にしているとエラーになるが、半角で「3」と記述すると正常に登録できる)

$sql = "INSERT INTO cdinfo(cd_no,artist_name,title,genre,melody1) VALUES(9,'test1','test2','J-POP','test3')";
$result = query($sql,$con);

(上記”query”の中身)

<?php
function query($sql,$con) {
$result = mysql_query($sql,$con);
if ($result == false) {
echo ("クエリーの実行に失敗しました!");
exit();
}
return $result;
}
?>

A 回答 (5件)

データベースにconnectした直後、insertを実行する前に


$sql = "set names sjis";
$result = query($sql, $con);

のようにすればよいと思います。
試してみてください。
    • good
    • 0
この回答へのお礼

ありがとうございました!無事に出来ました。連休最後にして解決してスッキリしました。

お礼日時:2007/05/06 17:18

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”のあとに書いてみたら全然違うエラーが出たのでこんな記述方法ではないのだろうとわかりましたが。

申し訳ないです、ど素人な質問で。

補足日時:2007/05/06 10:53
    • good
    • 0

まずはこちらの件から。



> [mysqld]
> default-character-set=sjis

承知しました。データベースの文字コードはシフトJISである、ということですね。

> 文字コードはshift-jisだと思いますが、
> 上記の”Insert”文の数行後に下記のように記述してあります> (本の例題のまま)。ここだと遅いのでしょうか?

スクリプトの編集に使われているソフトウェアに文字コード切り替え機能がなければ、
おそらくはシフトJISでしょうね。

また、<head>タグで始まるその4行は、一般にはhtmlファイルやphpスクリプトの
先頭部分に書くものだと思うのです。
insert文の後に書いてあるとのことで、スクリプトがどういった構成になっているかが
よくわからなくなりました。
    • good
    • 0

#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;

補足日時:2007/05/05 18:20
    • good
    • 0

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">

補足日時:2007/05/05 18:12
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!