这在防止SQL注入方面是否安全?
$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 :(得分:5)
是的,这是安全的。从MySQL的角度来看,这与bindParam()
完全相同。
使用bindParam()
的原因是您希望通过引用绑定变量。除此之外,bindParam()
唯一能做的就是让你无缘无故地编写更多的PHP代码。
PS:与您的问题相切,但使用LIKE
进行全文搜索肯定会非常慢。您应该使用真正的全文索引或Sphinx搜索。请参阅我的演示文稿Full Text Search Throwdown。