我正在用 PHP 开发电话簿应用程序。输入 3 个字符后,将触发搜索脚本。这个查询效果很好。但我发现,如果我在搜索框中输入 %%%
个字符,页面会列出所有我不希望它执行的记录。
$value = "%" . $_POST['value'] . "%";
$query = $db->prepare("SELECT
k.id,
k.name,
k.surname,
k.phone,
k.email,
u.title,
g.job,
b.dept
FROM
persons k
JOIN titles u ON k.title_id = u.id
JOIN departments b ON k.dept_id = b.id
JOIN jobs g ON k.job_id = g.id
WHERE
active = 1 AND
(
LOWER(k.name) LIKE :v1 OR
LOWER(k.surname) LIKE :v2 OR
LOWER(k.phone) LIKE :v3 OR
LOWER(k.email) LIKE :v4
)
ORDER BY
dept,
name,
surname"
);
$query->bindValue(":v1", strtolower($value), PDO::PARAM_STR);
$query->bindValue(":v2", strtolower($value), PDO::PARAM_STR);
$query->bindValue(":v3", strtolower($value), PDO::PARAM_STR);
$query->bindValue(":v4", strtolower($value), PDO::PARAM_STR);
$query->execute();
如何防止这个错误?
最佳答案
禁止(或移除)那些like
特殊字符的输入,例如%
,并在绑定(bind)参数时将其添加到字符串中,例如:
$query->bindValue(":v1", strtolower($value) . "%", PDO::PARAM_STR);
或:
$val2 = strtolower($value) . "%";
$query->bindValue(":v1", $val2, PDO::PARAM_STR);
这可能是最简单的解决方案。
关于php - 我的 sql 查询中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16368206/