Php 如何使用prepare for query having LIKE子句
请参阅下面的代码。这在mysqli方法中可以很好地工作,但容易发生sql注入。所以我想使用预先准备好的语句,但同样地,我不能使用它Php 如何使用prepare for query having LIKE子句,php,pdo,Php,Pdo,请参阅下面的代码。这在mysqli方法中可以很好地工作,但容易发生sql注入。所以我想使用预先准备好的语句,但同样地,我不能使用它 $t = strtolower($_POST['e']); $search_exploded = explode(" ", $t); $construct = ''; foreach ($search_exploded as $search_each) { $construct .= "AND title LIKE ? "; } $query = $con
$t = strtolower($_POST['e']);
$search_exploded = explode(" ", $t);
$construct = '';
foreach ($search_exploded as $search_each) {
$construct .= "AND title LIKE ? ";
}
$query = $conn->prepare("SELECT * FROM vdo WHERE 1 $construct ");
$query->execute(["%$search_each%"]);
$found = $query->rowCount();
if ($found == 0) {
echo "NO Result Found";
} else {
while ($row_id1 = $query->fetch(PDO::FETCH_ASSOC)) {
echo $title = $row_id1['title'];
}
}
您只传递了一个参数,即foreach循环中搜索词数组的最后一个参数
$query->execute(["%$search_each%"]);
您需要使用整个术语数组
$params = array_map(function($term) { return "%$term%"; }, $search_exploded);
$query->execute($params);
这与mysqli方法配合得很好
mysqli也准备了语句,它们在这方面的工作方式完全相同。没有允许SQLInjection的“mysqli”方法,只是说。