gpt4 book ai didi

php - 带百分比和限制的 PDO 准备语句

转载 作者:行者123 更新时间:2023-11-29 12:45:27 25 4
gpt4 key购买 nike

我对 PDO 确实很陌生,但我需要使用它来避免 SQL 注入(inject)。

这是我的 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 相同,它变成一个值而不是变量。

关于php - 带百分比和限制的 PDO 准备语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25515410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com