【解決方法】キーワード「inner」付近の構文が正しくありません。


SQL クエリでエラーが発生しました

SELECT cstdetails.cstname, cstdetails.loannu, cstdetails.loanamt, cstdetails.mobile1, cstduebill.principal, cstduebill.dueint, cstduebill.billtotal, cstduebill.loandur, cstduebill.duedate, cstduebill.billdate, cstduebill.rectno,     cstdetails.loannu, left(duedate,2) from cstduebill where left(duedate,2) = '" + tstTxt.Text + "' inner join cstdetails on  cstduebill.loanslno = cstdetails.loannu
Incorrect syntax near the keyword 'inner'.

誰でも私のエラーの解決策を教えてください。

私が試したこと:

Error came in my SQL query 

解決策 1

0x01AAが言ったことに追加するには…
文字列を連結して SQL コマンドを作成しないでください。 データベース全体を破壊する可能性のある、偶発的または意図的な SQL インジェクション攻撃にさらされる可能性があります。 代わりに、常にパラメーター化されたクエリを使用してください。

文字列を連結すると、SQL が次のようなコマンドを受け取るため、問題が発生します。

SQL
SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'

ユーザーが追加した引用符は、SQL に関する限り文字列を終了させ、問題が発生します。 しかし、それはもっと悪いかもしれません。 代わりに「x’;DROP TABLE MyTable;–」と入力すると、SQL は非常に異なるコマンドを受け取ります。

SQL
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'

どの SQL が 3 つの別個のコマンドとして認識されるか:

SQL
SELECT * FROM MyTable WHERE StreetAddress = 'x';

完全に有効な SELECT

SQL
DROP TABLE MyTable;

完全に有効な「テーブルの削除」コマンド

SQL
--'

そして、それ以外はすべてコメントです。
一致する行を選択し、DB からテーブルを削除し、それ以外は無視します。

したがって、常にパラメーター化されたクエリを使用してください。 または、DB をバックアップから頻繁に復元する準備をしてください。 バックアップは定期的に取っていますよね?

コメント

タイトルとURLをコピーしました