PHP+MySQLについて質問です。


PHPから、mysql_query($qsl,$conn)で、
$sql = ”Insert into test_tbl(col1,col2) values (1,’てすと’)”;
というような日本語を含んだInsertを流すと日本語文字列が落ちて登録されます。
インサート失敗などならまだ理解できるのですが、col1に1と入ったレコードはできています。
これは仕様ですか?また、回避する(日本語文字列を登録する)やり方について教えてください。

詳細環境はLinux - Apache/2.0.52 (Unix) PHP/5.0.3 - mysql5.0.2 alpha版です。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答6件)

id:naoya3839 No.1

回答回数59ベストアンサー獲得回数0

ポイント17pt

” ” で囲んだ中の ’’の中身は変数と判断されるからです。

id:nakeyouguisu

文字列を明示するにはどうしたらいいのでしょうか。”’’文字列?’’”???

$iCol1 = $_POST[’col1’];

$sCol2 = $_POST[’col2’];

$iCol1 = 555;

$sCol2 = ”てすと”;

//print ($iCol1.$sCol2);

$sql = ”Insert into test_tbl(col1,col2) values (’$iCol1’,’$sCol2’)”;

ちなみに変数に突っ込んでみても、登録されませんでした。

2005/02/03 16:53:15
id:naoya3839 No.2

回答回数59ベストアンサー獲得回数0

ポイント17pt

回避するには、’’の中身を外出ししましょう。

$tst = ”てすと”;

$sql = ”Insert into test_tbl(col1,col2) values (1,’”.$tst.”’)”;

と記述すればうまくいきます。

id:nakeyouguisu

困りました。できません。ちなみに半角文字列なら普通にインサートできます。

2005/02/03 16:55:58
id:mohri No.3

回答回数74ベストアンサー獲得回数9

ポイント17pt

日本MySQLユーザ会のMLで同じような話題が最近出ていました。

参考URLの1つ目のこのスレッドは役に立ちませんか?

参考URLの2つ目は、やはり日本MySQLユーザ会のFAQです。4.1以降では国際化処理などがそれ以前と変わっているので注意ということが書かれています。

id:nakeyouguisu

MySQL5.0は冒険しすぎでしたか…

2005/02/03 17:23:47
id:Kumappus No.4

回答回数3784ベストアンサー獲得回数185

ポイント17pt

外していたらすみませんが、PHPのコンパイル時にマルチバイト文字対応のオプションは設定されていますか?

--enable-mbstring

--enable-mbregex

あとひょっとすると

-enable-zend-multibyte

id:nakeyouguisu

’--enable-mbstring’ は指定しています。

--enable-mbregex

-enable-zend-multibyte

は指定していません。mySQLを入れ替えるまでダメという段になったらこの辺もトライしてみます。

2005/02/03 17:26:27
id:pingoo No.5

回答回数18ベストアンサー獲得回数0

ポイント16pt

5.0系列は使ったことがないので見聞きした範囲で。まず、テーブルのカラム型とその長さは文字列に適したもの(型や長さ)になっているでしょうか? 参考URLにはUTF8の場合CHARではなくVARCHARを使えと書いてあるのでそのあたりを確認してみてはどうでしょうか。また、もしサンプルのSQLを実際には間に変数をいれているようだったらinsert文を発行する前にprintf()などしてチェックしてみるのもいいかもしれません(すでにやっているとは思いますが念のため)。

id:nakeyouguisu

私も始めてMySQLを使うのでよくわかっていませんが、さすがにそこら辺は大丈夫です。

ちなみに、TelnetでMySQLコマンドを打ってみたのですが日本語が打てませんでした。

やはり根本的問題ですかね。PHP連携以前の問題のようです。

+-------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+-------+

| col1 | int(5) | YES | | NULL | |

| col2 | varchar(20) | YES | | NULL | |

+-------+-------------+------+-----+---------+-------+

2005/02/03 17:38:42
id:kn1967 No.6

回答回数2915ベストアンサー獲得回数301

ポイント16pt

php.ini で指定されている文字コードの確認はされましたか?

id:nakeyouguisu

はい。さすがにPHPの文字化けとは異なるようです。さて…、mysqlを4に落としますか…。

2005/02/04 16:20:49

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません