• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:phpでmysql_queryを使って以下の文)

phpでmysql_queryを使ってWHERE句で数字比較をするとエラーが発生する

このQ&Aのポイント
  • WHERE句で数字比較をするとエラーが発生します。数字の5の部分はHTMLのテキストボックスからPOSTで受け取っています。
  • WHERE句が無い場合や、文字列比較にLIKEを使った場合は正常に動作します。
  • turnはint(11)の型ですが、なぜか数字比較でエラーが発生します。PHPのバージョンは5.4.29で、MySQLクライアントのバージョンは5.5.28です。

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

  • ベストアンサー
noname#244856
noname#244856
回答No.2

以下の「初心者がやりがちなミス」にたくさん該当しているので確認してください。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でバインドするのがポイントです。これを指定しないと文字列になってしまい、比較がおかしくなります。

sting2011
質問者

お礼

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

sting2011
質問者

補足

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

その他の回答 (2)

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.3

ネイティブなMySQL関数(すでに非推奨)を使っている時点でアレですが、それはPDOで書き直していただくとして、 >エラーが出ます。 エラーの内容はどのようなものですか?また turn は table1 のカラムですか?table2 のカラムですか(まさか「両方にある」なんてオチはないと思いますが)。turnをテーブル名指定しても同じですか(where table1.turn < 5)。

sting2011
質問者

お礼

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

  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.1

>・数字の5の部分はHTMLのテキストボックスからPOSTで貰っています。 5,は数字ですか? WHERE turn<'5' の扱いになっていませんか?

sting2011
質問者

お礼

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