Php 关于使用预备语句排序的两个问题 为什么在查询中使用ASC或DESC时返回相同的结果 是否有方法放置占位符而不是*?使用?并绑定它会在$row数组中返回一个“?”

Php 关于使用预备语句排序的两个问题 为什么在查询中使用ASC或DESC时返回相同的结果 是否有方法放置占位符而不是*?使用?并绑定它会在$row数组中返回一个“?”,php,sql,sql-order-by,prepared-statement,Php,Sql,Sql Order By,Prepared Statement,这是一个有点长的评论 不能使用参数替换SQL语句中的标识符。标识符的示例是列和表名。您也不能替换SQL关键字或运算符,例如内部或= 在本例中,您将用常量值替换参数。它被视为值,而不是列引用(或表达式)。因此,ASC和DESC不区分相等的值。这对于注释来说有点长 不能使用参数替换SQL语句中的标识符。标识符的示例是列和表名。您也不能替换SQL关键字或运算符,例如内部或= 在本例中,您将用常量值替换参数。它被视为值,而不是列引用(或表达式)。因此,ASC和DESC不能区分相等的值。不能用参数替换准备

这是一个有点长的评论


不能使用参数替换SQL语句中的标识符。标识符的示例是列和表名。您也不能替换SQL关键字或运算符,例如
内部
=


在本例中,您将用常量值替换参数。它被视为值,而不是列引用(或表达式)。因此,
ASC
DESC
不区分相等的值。

这对于注释来说有点长


不能使用参数替换SQL语句中的标识符。标识符的示例是列和表名。您也不能替换SQL关键字或运算符,例如
内部
=


在本例中,您将用常量值替换参数。它被视为值,而不是列引用(或表达式)。因此,
ASC
DESC
不能区分相等的值。

不能用参数替换准备语句中的标识符。唉,您需要使用查询字符串。我不想替换ASC/DESC,问题是它们都返回相同的结果(特别是DESC的行为类似于ASC),您需要使用白名单,然后如果列名匹配,则将其作为文本插入。无法绑定表/列。通常($n=1;$row=$result->fetch_assoc();$n++)的
写为
,而($row=$result->fetch_assoc()){
“问题是它们都返回相同的结果”-该问题的原因是您首先使用了占位符。准备好的语句中的占位符自动表示数据,而不是SQL关键字/语法/标识符。您在这里不是按列排序,而是按静态值
creationdate
排序。您想要
按creationdate ASC
排序,但实际需要的是什么ly did在这里,相当于'creationdate'ASC
@user3783243编写的
ORDER,我把它作为一个to
echo
id号,你不能用参数替换一个准备好的语句中的标识符。唉,你需要咀嚼查询字符串。我不想替换ASC/DESC,问题是它们都返回same result(尤其是DESC的行为类似于ASC)您需要使用白名单,然后如果列名匹配,则将其作为文本插入。您不能绑定表/列。通常($n=1;$row=$result->fetch_assoc();$n++)
写为
,而($row=$result->fetch_assoc()){
“问题是它们都返回相同的结果”-该问题的原因是您首先使用了占位符。准备好的语句中的占位符自动表示数据,而不是SQL关键字/语法/标识符。您在这里不是按列排序,而是按静态值
creationdate
排序。您想要
按creationdate ASC
排序,但实际需要的是什么ly did在这里,相当于'creationdate'ASC的订单
@user3783243我写它是为了
echo
id号,所以我会写一些类似于“$sql=”SELECT$from
accountlist
ORDER BY$what ASC””,不是吗?(显然是经过一次切换来过滤我的标识符)@stacker是的,它应该可以工作,我会写一些像“$sql=”SELECT$from
accountlist
ORDER BY$what ASC”`,不是吗?(显然是在一次swith之后过滤我的标识符)@stacker是的,它应该可以工作
<?php
$what = 'creationdate';

$sql = "SELECT * FROM `accountlist` ORDER BY ? [ASC/DESC]";

$stmt = $conn->stmt_init();

if(!($stmt->prepare($sql)))
{
  echo "Error";
} else {
  $stmt->bind_param("s", $what);
  $check = $stmt->execute();
  $result = $stmt->get_result();
}

for($n=1; $row = $result->fetch_assoc(); $n++)
{
  var_dump($row);echo "<br />";

  echo $n . ':<br />';
  foreach($row as $key => $value) echo $key . ': '. $value . '<br />';
  echo '<br />';
}

echo $check ? 'success' : 'error/no lines'