2013-07-15 66 views
-1

我正在使用PDO的搜索功能使用預準備語句,並且使用了類似子句。 Mysql是5.5.32避免PDO中的SQL注入並使用類似子句

當用戶在html表單中爲字段輸入%時,這將轉儲所有表內容。我認爲準備好的語句會處理它,並且執行中有%,以便它與輸入的子串匹配。

如何僅將POST字段用作正常文本,以便它不會導致此類問題?

+2

它看起來像你可以用'[%]'替換'%'](http://stackoverflow.com/questions/7191449/how-do-i-escape-a-percentage-sign-in-t -sql),但這看起來像一個黑客。 –

+2

也許這個問題接受的答案可能有助於http://stackoverflow.com/questions/3683746/escaping-mysql-wild-cards – Ma3x

+0

感謝您的鏈接@ Ma3x –

回答

1

當用戶在html表單中輸入字段的%時,這將轉儲所有表格內容。

是的。這就是LIKE運算符的確切目的。不,這與準備好的陳述無關。後者用於格式化數據,而不會干擾查詢邏輯。

如果你不喜歡你的代碼的工作方式 - 改變它。但目前它的工作方式與您編碼的方式完全一樣,沒有缺陷。

+0

雅我也這麼認爲,但不知道是否有一個更好的方法。 所以現在我使用它是這樣的: \t $ stmt-> execute(addcslashes(array($ _ POST ['field']),「_%」)); –

+0

我看不出這個替代品。雖然它不會造成任何傷害 –

+0

我這樣做,以便如果用戶輸入字段%,它將被轉義。如果沒有改變,完整的表格使用% –