php - 关于 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'
?>
- 为什么当我在查询中使用 ASC 或 DESC 时返回相同的结果?
- 有没有办法放置一个占位符而不是那个
*
?使用 a?
并绑定它会返回一个“?” 在 $row 数组中...
解决方案
这是一个有点长的评论。
您不能使用参数替换 SQL 语句中的标识符。标识符的示例是列名和表名。您也不能替换 SQL 关键字或运算符,例如INNER
or =
。
在您的情况下,您正在用常量值替换参数。它被视为value,而不是列引用(或表达式)。因此,ASC
不要DESC
区分相等的值。
推荐阅读
- azure-data-factory-2 - Azure 数据工厂的问题 - 长文件路径名
- javascript - 锚标记导航删除所有事件监听器
- acumatica - Acumatica 需要自定义字段
- c# - 在同一个命名空间中使用 MongoDB.Driver.Linq 和 System.Linq 可能会遇到什么冲突?
- r - 在 R 中有条件地格式化不同的时间序列类型
- javascript - DNS更改后如何解决私人浏览器问题
- javascript - 如何遍历包含数组的对象?
- reactjs - 在 RowRenderer 上未定义 renderBaseRow
- django - 在 Django 中设置两层用户系统
- r - 无法从 URL 安装“未知包”