gpt4 book ai didi

php - 如何将 pdo 的准备好的语句用于 order by 和 limit 子句?

转载 作者:IT王子 更新时间:2023-10-29 00:16:42 36 4
gpt4 key购买 nike

我想使用一个准备好的语句,其中传入的参数用于 ORDER BYLIMIT 子句,如下所示:

$sql = 'SELECT * FROM table ORDER BY :sort :dir LIMIT :start, :results';
$stmt = $dbh->prepare($sql);
$stmt->execute(array(
'sort' => $_GET['sort'],
'dir' => $_GET['dir'],
'start' => $_GET['start'],
'results' => $_GET['results'],
)
);

但是 $stmt->fetchAll(PDO::FETCH_ASSOC); 什么都不返回。

有人可以指出我做错了什么吗?可以做到吗?如果没有,我应该引用什么来获得可以使用参数的完整子句列表?

最佳答案

使用后:

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

我收到消息:

Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''0', '10'' at line 1

因此,当您使用数组执行时,它会将您的输入视为字符串,这对于 LIMIT 来说不是一个好主意

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT * FROM table ORDER BY :sort :dir LIMIT :start, :results";
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':start', $_GET['start'], PDO::PARAM_INT);
$stmt->bindParam(':results', $_GET['results'], PDO::PARAM_INT);
$stmt->bindParam(':sort', $_GET['sort']);
$stmt->bindParam(':dir', $_GET['dir']);
$stmt->execute();

$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
print_r($data);

关于php - 如何将 pdo 的准备好的语句用于 order by 和 limit 子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2683576/

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