Php 如何使用prepare for query having LIKE子句

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

请参阅下面的代码。这在mysqli方法中可以很好地工作,但容易发生sql注入。所以我想使用预先准备好的语句,但同样地,我不能使用它

$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”方法,只是说。