を文字列を数値に変換しないMySQLを行いますfoo
、bar123
などのIDなどのユーザ名を与えられたとき私はIDによって、またはユーザ名でテーブルからユーザーを選択し、自分のアプリケーションでクエリを持って
SELECT * FROM users WHERE id = '$x' OR username = '$x'
これが働いています1
,123
。 しかし、2foo
のようなユーザー名を入力すると、ユーザー2foo
とユーザーid=2
の両方が選択されます。したがって、2
が2foo
になり、ユーザーが見つかります。さらに、警告メッセージが表示されます。1292:間違ったDOUBLE値の切り捨て:2foo。
この変換を行わないようにMySQLに指示する方法はありますか(このクエリではなく、データベース全体ではありません)。または、偽の結果を破棄するためにクエリの後ろにフィルタリングを行う必要がありますか?
実際のクエリを作成する関連するコードを共有できますか?これはmysqlの問題ではなく、生成された質問にある可能性が高いです。 –
私はこのクエリをMySQL Query Browserに入力しました: 'SELECT * FROM users WHERE id = '2foo' OR username = '2foo''。私はこの質問を私のアプリケーションから問題のあるものと特定したので、周囲のコードはありません。 MySQLバージョン:5.1.41-3ubuntu12.10 – arnep
正しいことは、$ xが数字であるかどうかを確認し、それに応じてクエリを構築することです: 'if(is_numeric($ x)){ $ sql =" SELECT *ユーザid = $ xまたはユーザ名= '$ x' " } else { $ safeX = mysql_real_escape_string($ x); //準備されたステートメント、または他のものを好むもの。 $ sql = "WHERE username = '$ x'" } 'SELECT * FROM users ' –