首页 > 解决方案 > 关于 ORDER BY 使用 Prepared Statements 的两个问题

问题描述

<?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. 有没有办法放置一个占位符而不是那个*?使用 a?并绑定它会返回一个“?” 在 $row 数组中...

标签: phpsqlsql-order-byprepared-statement

解决方案


这是一个有点长的评论。

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

在您的情况下,您正在用常量值替换参数。它被视为value,而不是列引用(或表达式)。因此,ASC不要DESC区分相等的值。


推荐阅读