2014-09-28 79 views
0

我有這個簡單的MySQL查詢:MYSQL間隔查詢SQL注入

SELECT * FROM table WHERE date > now() - INTERVAL $hours HOUR 

$hours是一個PHP的GET變量。在查詢中使用它之前,我是否必須對此變量進行任何檢查以避免SQL注入或足夠安全?我使用的PDO語句

+2

準備好的語句就足夠了。 – Mihai 2014-09-28 18:04:38

+0

如果直接替換SQL字符串,則存在注入風險。 – 2014-09-28 18:07:14

+0

@GordonLinoff yes.i直接替換。我可以用這個變量綁定嗎?像'INTERVAL:小時' – 2014-09-28 18:08:19

回答

1

像這樣的好:

$sth = $Db->dbh->prepare("SELECT * FROM 'table' WHERE date > now() - INTERVAL :hours"); $sth->execute(array(':hours'=>$hours,':secondThing'=>$variable));

這是一個辦法esacpe你的字符串。這可能與您的代碼不同,但執行和查詢中的數組將相同(如果您使用PDO)。

0

使用預處理語句

How can I prevent SQL-injection in PHP?

也許你直接從$ _POST或$ _GET

得到變量

$ unsafe_variable = $ _ POST [ 'USER_INPUT'];

+0

我已經在問題中說過我使用準備好的語句(PDO):) – 2014-09-28 18:39:44