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,我把它作为一个toecho
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$fromaccountlist
ORDER BY$what ASC””,不是吗?(显然是经过一次切换来过滤我的标识符)@stacker是的,它应该可以工作,我会写一些像“$sql=”SELECT$fromaccountlist
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'