如何在准备查询时删除任何字符串的引号

KRM*_*KRM 4 php mysql quotes pdo

$desc = 'DESC';

$getRecords = $conn->prepare('SELECT * FROM `courses` ORDER BY `id` :sort LIMIT :limitInc, :limit ');

$getRecords->bindValue(':limit',$limit,PDO::PARAM_INT);  // working

$getRecords->bindValue(':limitInc',$limitInc,PDO::PARAM_INT); // working

// *** The line below isn't working ***
$getRecords->bindValue(':sort', $desc ,PDO::PARAM_STR); // not working

$getRecords->execute();
Run Code Online (Sandbox Code Playgroud)

我想$desc在我的准备查询中调用..

致命错误:带有消息'SQLSTATE [42000]的未捕获异常'PDOException':语法错误或访问冲突:1064 SQL语法中有错误; 检查与您的MySQL服务器版本相对应的手册,以便在C:\ xampp\htdocs\portfolio \nasiraan\try\indexx.php的第1行''DESC'LIMIT 0,5'附近使用正确的语法:89 Stack trace:#0 C:\ xampp\htdocs\portfolio \nasiraan\try\indexx.php(89):PDOStatement-> execute()#1 {main}抛出C:\ xampp\htdocs\portfolio \nasiraan\try \第89行的indexx.php

我相信解决方案是..从字符串中删除引号$desc......但是如何?

Ja͢*_*͢ck 6

您将不得不使用我担心的文字字符串,因为占位符不能包含关键字,例如排序顺序(以及其他):

$query = sprintf('SELECT * FROM `courses` ORDER BY `id` %s LIMIT :limitInc, :limit ', 
    strcasecmp($desc, 'DESC') === 0 ? 'DESC' : 'ASC')
);
$getRecords = $conn->prepare($query);
Run Code Online (Sandbox Code Playgroud)

以这种方式构建查询并不是那么糟糕,因为只有两个选项.