我真的是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
相同,它变为值而不是变量。