- ベストアンサー
phpでmysql_queryを使ってWHERE句で数字比較をするとエラーが発生する
- WHERE句で数字比較をするとエラーが発生します。数字の5の部分はHTMLのテキストボックスからPOSTで受け取っています。
- WHERE句が無い場合や、文字列比較にLIKEを使った場合は正常に動作します。
- turnはint(11)の型ですが、なぜか数字比較でエラーが発生します。PHPのバージョンは5.4.29で、MySQLクライアントのバージョンは5.5.28です。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
以下の「初心者がやりがちなミス」にたくさん該当しているので確認してください。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でバインドするのがポイントです。これを指定しないと文字列になってしまい、比較がおかしくなります。
その他の回答 (2)
- agunuz
- ベストアンサー率65% (288/438)
ネイティブなMySQL関数(すでに非推奨)を使っている時点でアレですが、それはPDOで書き直していただくとして、 >エラーが出ます。 エラーの内容はどのようなものですか?また turn は table1 のカラムですか?table2 のカラムですか(まさか「両方にある」なんてオチはないと思いますが)。turnをテーブル名指定しても同じですか(where table1.turn < 5)。
お礼
ありがとうございました。
- maiko0318
- ベストアンサー率21% (1483/6969)
>・数字の5の部分はHTMLのテキストボックスからPOSTで貰っています。 5,は数字ですか? WHERE turn<'5' の扱いになっていませんか?
お礼
なっていないんです。出力させてその文字列部分を貼り付けてるので。でも、ありがとうございます。
お礼
ご指摘頂いた箇所。理解がすぐには追いつかなそうなので、ちゃんと理解した上で出直してきます。ありがとうございました。
補足
おお!ありがとうございます。確かに初心者なのでこのサイトは勉強になります。すぐにでもお礼したいですが、もしかしたら、もう少し聞きたいことが出るかもしれないので、補足の方ですいません。