具有%和限制的PDO准备语句

时间:2014-08-26 21:26:36

标签: php mysql sql pdo

我是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'%',所以在这种情况下我可以看到每个&的所有结果#34; REFID&#34 ;.有没有办法这样做,或者我真的需要为这两种情况创建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();

1 个答案:

答案 0 :(得分:1)

bindParam需要变量引用,因此它不能用作

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

您可以创建一个类似$zero = 0的内容,但这似乎没必要,所以您只需使用bindValue即可。 (int)$limiter相同,它变为值而不是变量。