我正在尝试根据来自表单的字符串过滤结果。这是我的代码。
<?php
$query = $_GET['query']; // gets the string entered from the form.
$userSearch = $db->prepare("SELECT id, user_id, feedback FROM `QComments`
WHERE `feedback`
LIKE '%$query%'
ORDER BY user_id");
$userSearch->execute();
$userSearchResult = $userSearch->fetchAll(PDO::FETCH_ASSOC);
?>
<?php // Display search result
foreach ($userSearchResult as $result1){
echo $result1['feedback'];
}
?>
无论我输入什么字符串,这基本上都会显示数据库中的所有记录。
但是当我在PHPMYAdmin SQL框中输入这个MySQL语句时
SELECT id, user_id, feedback FROM `QComments`
WHERE `feedback`
LIKE '%suggestion%'
ORDER BY user_id
我只获得具有建议关键字的结果。但PHP正在显示所有内容。我的代码出了什么问题?请建议我。
答案 0 :(得分:1)
使用这样的预备语句一直对我有用。
准备好的语句不只是执行字符串替换。它们将数据与查询完全分开传输。仅在将值嵌入查询时需要引号
<?php
$query = '%'.$_GET['query'].'%'; // gets the string entered from the form.
$userSearch = $db->prepare("SELECT id, user_id, feedback FROM `QComments`
WHERE `feedback`
LIKE :query
ORDER BY user_id");
$userSearch->BindParam(':query', $query);
$userSearch->execute();
$userSearchResult = $userSearch->fetchAll(PDO::FETCH_ASSOC);
?>