关于使用预准备语句进行ORDER BY的两个问题

问题描述 投票:0回答:1
<?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'

?>

  1. 为什么当我在查询中使用ASC或DESC时,为什么返回相同的结果?
  2. 是否可以使用占位符代替*?使用?并将其绑定会返回“?”在$ row数组中...
php sql sql-order-by prepared-statement
1个回答
0
投票

对于评论,这有点长。

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

在您的情况下,您要用一个恒定值代替参数。将其视为作为值,而不是列引用(或表达式)。因此,ASCDESC不能在相等的值之间进行区分。

© www.soinside.com 2019 - 2024. All rights reserved.