gpt4 book ai didi

php - PDO 参数根本不起作用

转载 作者:可可西里 更新时间:2023-11-01 08:55:23 25 4
gpt4 key购买 nike

我正在查看一些代码并将其中的数据库部分更改为使用 PDO。到目前为止,除了我准备好的语句中的参数外,一切都运行良好。由于某种原因,下面的代码根本不起作用。两个 $_GET 变量基本上用于特定页面上的排序目的。查询本身在不使用参数的情况下工作正常,如果我手动将“ORDER BY id DESC”放在最后,那也工作正常。我似乎无法让它使用可变参数。这是代码:

$sort = $_GET['sort'];
$order = $_GET['order'];
$statement = $db->prepare('SELECT uid, id, fname, lname, ext, uname
, email, access, created, modified, last_login, enabled
FROM users
ORDER BY :col :or');
$statement->bindParam(':col', $sort);
$statement->bindParam(':or', $order);
$statement->execute();
$num = $statement->rowCount();

有什么建议吗?

谢谢

最佳答案

将参数作为参数传递给 ORDER BY 子句时,它们被视为文字表达式。如果你想按列或别名排序,你需要传递一个标识符。在 MySQL 中,这些由不带引号的字符串表示,或者最好是反引号带引号的字符串,例如

ORDER BY `fname`

类似地,方向常量在存在时必须使用两个关键字 ASCDESC 中的任何一个。我不确定如果您尝试使用参数(将被评估为表达式)会发生什么。


这是我过去如何使用允许的可排序列的映射来完成的...

$orderCols = array(
'firstName' => 'fname',
'lastName' => 'lname'
);
$sort = isset($_GET['sort'], $orderCols[$_GET['sort']])
? $orderCols[$_GET['sort']
: 'uid'; // some sane default

$order = isset($_GET['order']) && $_GET['order'] == 'DESC'
? 'DESC' : 'ASC';

$query = sprintf('SELECT uid, id, fname, lname, ext, uname, email, access, created, modified, last_login, enabled FROM users ORDER BY `%s` %s',
$sort, $order);
$statement = $db->prepare($query);

关于php - PDO 参数根本不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5738141/

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