こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQLのIN演算子について悩んでいます。

SQLのIN演算子について悩んでいます。
--------------------------------------------------------------------
<form method="get" action="index.php">
<input type="checkbox" name="check_addr[]" value="東京都"/>東京都<br />
<input type="checkbox" name="check_addr[]" value="千葉県"/>千葉県<br />
<input type="checkbox" name="check_addr[]" value="神奈川"/>神奈川<br />
<input type="submit" value="選択する" />
</form>
---------------------------------------------------------------------
のフォームから下記のPHPで
--------------------------------------------------------------------
$sql = "SELECT * FROM testvote WHERE mark = '0'";
if(isset($_GET["check_addr"])){
$array = implode(",", $_GET["check_addr"]);
$sql = "SELECT * FROM testvote WHERE addr IN(" .$array. ")";
}
-----------------------------------------------------------------------
チェックを入れた都道府県だけをMYSQLから取り出して表示させたいのですが、
どうにもうまく動きません。

色々と試しているのですが、IN演算子の中が数字などの場合はうまく動いています。
日本語でIN演算子を使用する場合はどうしたらいいのでしょうか?

ちなみに addrの中には都道府県(埼玉県・東京都・・・)のデータが入っています。

投稿日時 - 2010-05-14 12:57:43

QNo.5894294

すぐに回答ほしいです

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

データベースの文字コードは何になっていますでしょうか。
No.3の補足のURLを見る限り、サイトはEUC-JPになっているようですが、
データベースの文字コード設定もEUC-JPとなっていますか?
なっていない場合、SQLの実行前に文字コードの変換などが必要になるかと思います。

投稿日時 - 2010-05-14 17:26:24

このQ&Aは役に立ちましたか?

8人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(4)

ANo.3

インジェクション対策は別途する前提で・・・

<?
$sql = "SELECT * FROM testvote WHERE mark = '0'";
if(isset($_REQUEST["check_addr"])){
$array = "'".implode("','", $_REQUEST["check_addr"])."'";
$sql = "SELECT * FROM testvote WHERE addr IN({$array})";
}
print $sql;
?>

みたいな感じでどうでしょ?

投稿日時 - 2010-05-14 15:54:54

補足

ご連絡ありがとうございます。
やっぱりうまく動きません。
エラーが出てくるわけではないのですが・・・

書かれていた「print $sql;」によると

SELECT * FROM testvote WHERE addr IN('東京都','千葉県')

と表示されていてうまく動きそうですが・・・

URLの後半が
http:/***********/index.php?check_addr%5B%5D=%C5%EC%B5%FE%C5%D4&check_addr%5B%5D=%C0%E9%CD%D5%B8%A9
になっているのは関係ありますか?

投稿日時 - 2010-05-14 16:45:11

ANo.2

日本語(文字列)をシングルクォーテーションで囲んでください。

投稿日時 - 2010-05-14 13:07:01

補足

すばやい対応ありがとうございます。

$sql = "SELECT * FROM testvote WHERE addr IN(" .$array. ")";
      ↓
$sql = "SELECT * FROM testvote WHERE addr IN(" .'$array'. ")";

こういうことでしょうか?

投稿日時 - 2010-05-14 13:22:08

ANo.1

"や'で囲む。

投稿日時 - 2010-05-14 12:59:11

補足

すばやい対応ありがとうございます。

$sql = "SELECT * FROM testvote WHERE addr IN(" .$array. ")";
      ↓
$sql = "SELECT * FROM testvote WHERE addr IN(" .'$array'. ")";

こういうことでしょうか?

投稿日時 - 2010-05-14 13:22:54

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-