0
カーソルから列情報を取得しようとしていて、イライラするエラーが発生しました。 $ SEARCHを含むすべての列を選択したいとします。ここでは、コードは次のとおりです。sqliteデータベースのカーソル照会でエラーが発生しました
Bundle b = getIntent().getExtras();
SEARCH = b.getString("searchtext");
Cursor c = mDBHelper.getReadableDatabase().query("table", null, "name="+ SEARCH, null, null, null, null);
何らかの理由で、カーソルがランタイム例外をスローしています。ここでエラーです:
12-30 03:55:00.357: E/AndroidRuntime(1302): Caused by: android.database.sqlite.SQLiteException: near "CAP": syntax error: , while compiling: SELECT * FROM kroger WHERE name=john
なぜこれが起こっているわからないが、おそらく私のコードでは、非常に単純な誤りがありますが、私はそれが何であるかわかりません。ご協力いただきありがとうございます!
素晴らしい説明、ありがとうございます! – benbeel
最初の提案はなぜ攻撃の対象となり、2番目の提案は攻撃されないのですか? – barry
@barry:ユーザーが 'CAP 'を検索したとします。 DROP TABLEテーブル。 - '。最初の解決策では、これは次のSQLになります: 'SELECT * FROM table where name = 'CAP'; DROP TABLEテーブル。 - ''。 2番目の解決策では、SQLは '?* FROM table WHERE name =?'のままであり、 '? 'は偽の検索語句に文字列値として、構文的には意味的に束縛されているため、検索は良質な方法で失敗します。 –