我真的是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();

最佳答案

bindParam需要变量引用,因此不能与as一起使用

bindParam(":min", 0, PDO::PARAM_INT)


您可以创建一个类似$zero = 0的名称,但这似乎不必要,因此您可以使用bindValue代替。与(int)$limiter相同,它变为值而不是变量。

09-30 09:05