MySQL Ver5 の質問です。

下記の文はsql文の一部を抜粋しています。
LEFT JOIN の後、 $search_key になんか入っていたら検索条件を追加しなさい!という文章のつもりですがどこかおかしいですか?
一軒も検索してくれません。
よろしくお願いします。


function db_get_item_list($conn, $search_key){

$sql = <<<EOS
SELECT
I.item_id as item_id,
I.dist_id as dist_id,
I.item_name_kana as item_name_kana,
D.dist_name_kana as dist_name_kana
FROM
item_master as I
LEFT JOIN
distillery_master as D
ON
I.dist_id = D.dist_id
EOS;

if($search_key != "")
$sql .= <<<EOS
WHERE
item_name_kana like '%$search_key%'
OR
dist_name_kana like '%search_key%'
EOS;

}

回答の条件
  • 1人2回まで
  • 登録:2008/11/19 20:19:21
  • 終了:2008/11/19 20:58:47

回答(1件)

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332008/11/19 20:34:20

ポイント60pt
  1. 前半の EOS と後半の EOS の間に半角スペースは空いていますか?
  2. 最後の search_key の変数指定に$マークがありません。(これについては、コメントで訂正されていますね)
  3. $sqlの最後に ; が無い。(途中に改行文字が含まれているので、処理系によっては;は必須)

$sql を echo してみて、きちんとしたSQL文になっているかどうか確認してみてください。

id:seadwell

$sql を echo はきちんと何度も確認したんですが・・・。

2008/11/19 20:53:08
  • id:seadwell
    上記の訂正です。
    誤:
    dist_name_kana like '%search_key%'
    正:
    dist_name_kana like '%$search_key%'

  • id:pahoo
    何も考えずに回答してしまいましたが、ご質問のソースは PHP5 のものですよね?
  • id:seadwell
    スミマセン、書き忘れました。
    php5です。
    原因が判明しました。

    日本語で検索していたのですが、DBにはEUC-JP、検索窓からはUTF-8ということで、$search_key を SQL文発行前に、mb_convert_encoding をかけていないことが原因でした。
    死ぬほどくだらない落ちで申し訳ありませんでした。

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません