【发布时间】:2014-10-20 08:16:39
【问题描述】:
我是 PDO 的新手,但我需要使用它来避免 SQL 注入。
这是我的 SQL 查询,其中包含我通过 POST 请求获得的变量,我想使用该 SQL 查询执行 PDO(此版本有效):
if($refid == "") $refid="%";
$lastOrders = "SELECT * FROM Orders WHERE REFID LIKE'$refid'
ORDER BY dateAdded DESC LIMIT 0,$limiter";
$ps_orders = $db->query($lastOrders);
$data = $ps_orders->fetchAll();
我的问题: 给定的 $refid 要么是我可以在数据库中找到的数字,要么是 POST 请求未指定的数字(因此值为 $refid= “”),在这种情况下,我想将 WHERE 部分设置为:WHERE REFID LIKE '%',所以在这种情况下,我可以看到每个“RefID”的所有结果。有没有办法做到这一点,还是我真的需要为这两种情况创建 2 个不同的 SQL 查询?
我的尝试(不起作用无法弄清楚究竟是什么问题):
if($refid == "") $refid="%";
$sql = "SELECT * FROM Orders WHERE REFID LIKE :refid
ORDER BY dateAdded DESC LIMIT :min,:max";
$ps_orders = $db->prepare($sql);
$ps_orders->bindParam(':refid', $refid, PDO::PARAM_STR);
$ps_orders->bindParam(':min', 0, PDO::PARAM_INT);
$ps_orders->bindParam(':max', (int)$limiter, PDO::PARAM_INT);
$ps_orders->execute();
$data = $ps_orders->fetchAll();
【问题讨论】:
-
有错误提示吗?
-
正如我所描述的,$refid 是由 POST 请求设置的:$refid = $_POST['refid'];