2014-10-31 104 views
3

這是安全的方面防止SQL注入?與多個PDO查詢如

$query = "select * from products where 1"; 
$searchterms = @preg_split("/[ ,]+/",trim($_REQUEST["textsearch"])); 
foreach ($searchterms as &$st) { 
    $query .= " and description like ?"; 
    $st = "%".$st."%"; 
} 
$statement = $dbh->prepare($query); 
$statement->execute($searchterms); 

我通常做它bindParam()但這似乎如此簡單得多,這是可疑的。

+0

謝謝,我會嘗試Code Review,甚至不知道存在。傑伊我不知道,爲什麼綁定在for循環?這不一樣嗎? – TimSim 2014-10-31 20:43:20

+0

對我很好。 – jeroen 2014-10-31 20:43:29

+1

爲什麼你用'@'來壓制錯誤? – tadman 2014-10-31 20:53:22

回答

5

是的,它是安全的。這與MySQL的觀點與bindParam()完全一樣。

使用bindParam()的原因是您希望通過引用來綁定變量。除此之外,bindParam()唯一能讓你無緣無故地編寫更多的PHP代碼。

PS:與您的問題相切,但使用LIKE進行全文搜索肯定會非常慢。你應該使用真正的全文索引或者Sphinx Search。看到我的介紹Full Text Search Throwdown

+2

該死的,總是要學習的東西。 :)這個特定的數據庫不太可能有超過1000個產品,但仍然...爲什麼要馬虎? – TimSim 2014-10-31 20:47:33

+2

哇7秒vs 0.2秒(全文MyISAM)?我賣了。 – TimSim 2014-10-31 20:52:49