首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用预准备语句的SQL顺序

使用预准备语句的SQL顺序
EN

Stack Overflow用户
提问于 2013-09-29 21:12:53
回答 2查看 3.4K关注 0票数 0

我尝试过各种不同的代码变体,但无法让它工作,有人能指出正确的方向吗?

代码语言:javascript
复制
if(isset($_GET['s']) And isset($_GET['o'])) {
    if(strip_tags(htmlspecialchars($_GET['s'])) === 's') $sortingby = 'sender';
    if(strip_tags(htmlspecialchars($_GET['s'])) === 't') $sortingby = 'title';
    if(strip_tags(htmlspecialchars($_GET['s'])) === 'd') $sortingby = 'timestamp';
    if(strip_tags(htmlspecialchars($_GET['o'])) === 'a') $orderingby = 'ASC';
    if(strip_tags(htmlspecialchars($_GET['o'])) === 'd') $orderingby = 'DESC';
    echo '<br />';
    echo $sortingby;
    echo $orderingby;
}
$stmt = $pdo->prepare("SELECT * FROM messages WHERE
                                    receiver = :id AND rhide = 0 
                                    ORDER BY :sortingby :orderingby
                                    ");
$stmt->execute(array(
                                ':id'=>$id,
                                ':sortingby'=>$sortingby,
                                ':orderingby'=>$orderingby
                                ));
$messages = $stmt->fetchAll(PDO::FETCH_ASSOC);

当我回显变量时,变量被正确地分配,似乎我的内容被忽略了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-29 21:19:20

请查看以下链接:

Mysqli Prepare Statements + Binding Order BY 作为您找到的状态的php.net链接,您不能将绑定变量用于标识符。你需要一个解决办法。mysql_real_escape_char当然是一种方式。

..。还有..。

How do I use pdo's prepared statement for order by and limit clauses? 因此,ORDER字段应该构成传递到prepare()方法的string的一部分,而不是绑定到execute()之前的查询。

==========================================================

增编:

由于您已经在“准备”之前有效地验证列名和"ASC/DESC“子句,所以不存在SQL注入的危险。

我只需要做一个字符串:

代码语言:javascript
复制
$sql = 
  "SELECT * FROM messages WHERE " .
  "receiver = :id AND rhide = 0 " .
  "ORDER BY " . $sortingby . " " . $orderingby;
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':id', $id, PDO::PARAM_INT);
$stmt->execute();
$messages = $stmt->fetchAll(PDO::FETCH_ASSOC);
票数 0
EN

Stack Overflow用户

发布于 2013-09-29 21:15:36

只能用占位符绑定数据,不能绑定列名或表名。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19083323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档