【发布时间】:2013-02-11 15:02:36
【问题描述】:
人!
我有这个查询,它从$_POST 获取它的WHERE 参数。问题是我想动态获取两个比较值,而不为每个值创建查询。我现在拥有的是:
$what = $mysqli->real_escape_string($_POST['what']);
........
$query = "SELECT * FROM list WHERE ";
$query .= $what . " = ? LIMIT 0,10";
........
$stmt->bind_param('s', $what);
我的第一个问题:这在实践中有多安全?由于我无法同时绑定两个参数,是否还有其他更好的方法可以管理同一件事?
我遇到的第二个问题是:我想将= ? 更改为LIKE %?%,但无法正常工作。我尝试使用 CONCAT('%', ?, '%') (不好,我知道) ,但它仍然无法正常工作。
基本上我最终想要实现的是:WHERE ? LIKE %?%。可能吗?你能帮我解决这个问题吗?
干杯,亚历克斯
【问题讨论】:
-
这不安全,请使用白名单。
-
即使您可以避免 SQL 注入,如果不经常检查您的表中的存在的列 - 绝对按照建议使用白名单。
-
用like try:
WHERE .. LIKE ?然后bind_param('s', '%test%') -
我得到了
LIKE来配合 Mogria 的建议:$where = '%' . $_POST['where'] . '%'; -
@vulkoingim 问题是用户也可以输入 % 符号。如果您不想要这个,请参阅我的答案中的链接,也可以正确地逃避它。 PDO 不会那样做。
标签: php mysql mysqli prepared-statement