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

解決済みの質問

phpでmysql_queryを使って以下の文

phpでmysql_queryを使って以下の文を送るとエラーが出ます。
どうも、WHERE句で数字比較をするとダメなようです。

SELECT * FROM table1 LEFT OUTER JOIN table2 ON table1.name=table2.name WHERE turn<5

何がいけないのでしょうか?

・数字の5の部分はHTMLのテキストボックスからPOSTで貰っています。
・WHERE句が無いとちゃんと動く。
・WHERE句でLIKEを使った文字列比較は動く。
・turnはphpMyAdminで見てもint(11)になっている。
・実際は複数テーブルを連結したものです。わかりにくいので省きました。
・PHP:5.4.29
・MySQL クライアントのバージョン: 5.5.28
・サクラレンタルサーバー(スタンダード)上での動作。

投稿日時 - 2014-10-04 00:21:26

QNo.8778053

すぐに回答ほしいです

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

以下の「初心者がやりがちなミス」にたくさん該当しているので確認してください。mysql_queryを使っている時点でアウトです。

http://qiita.com/mpyw/items/b00b72c5c95aac573b71

PDOを使う際は

$stmt = $pdo->prepare('SELECT * FROM table1 LEFT OUTER JOIN table2 ON table1.name=table2.name WHERE turn<?');
$stmt->bindValue(1, filter_input(INPUT_POST, 'name属性名'), PDO::PARAM_INT);
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

といった感じでどうぞ。PDO::PARAM_INTでバインドするのがポイントです。これを指定しないと文字列になってしまい、比較がおかしくなります。

投稿日時 - 2014-10-04 05:07:34

補足

おお!ありがとうございます。確かに初心者なのでこのサイトは勉強になります。すぐにでもお礼したいですが、もしかしたら、もう少し聞きたいことが出るかもしれないので、補足の方ですいません。

投稿日時 - 2014-10-04 06:40:51

お礼

ご指摘頂いた箇所。理解がすぐには追いつかなそうなので、ちゃんと理解した上で出直してきます。ありがとうございました。

投稿日時 - 2014-10-05 05:52:47

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

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

回答(3)

ANo.3

ネイティブなMySQL関数(すでに非推奨)を使っている時点でアレですが、それはPDOで書き直していただくとして、

>エラーが出ます。

エラーの内容はどのようなものですか?また turn は table1 のカラムですか?table2 のカラムですか(まさか「両方にある」なんてオチはないと思いますが)。turnをテーブル名指定しても同じですか(where table1.turn < 5)。

投稿日時 - 2014-10-04 17:28:33

お礼

ありがとうございました。

投稿日時 - 2014-10-05 05:52:56

ANo.1

>・数字の5の部分はHTMLのテキストボックスからPOSTで貰っています。

5,は数字ですか?
WHERE turn<'5' の扱いになっていませんか?

投稿日時 - 2014-10-04 04:30:04

お礼

なっていないんです。出力させてその文字列部分を貼り付けてるので。でも、ありがとうございます。

投稿日時 - 2014-10-04 06:37:56

あなたにオススメの質問