php - 我的 sql 查询中的错误

标签 php mysql sql pdo

我正在用 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/

相关文章:

php - 使用 SonataAdminBundle 处理 simple_array

mysql - 构造mysql大表

sql - 如何使用连接按行查询值?

mysql - 如何优化我的查询以更快地运行?

php - 在 PHP 中根据其他值循环遍历值

php - 通过 jQuery .ajax 发送嵌套数组

mysql - 从其他表填充新表

php - 如何使用 php 在 phpmyadmin 中插入数组的数组

sql - postgres加入同一张表

php - 刷新页面时双重发送表单