Php 通过MySQL语句将变量传递到ORDER
我试图在MySQL语句中通过$variable1$variable2将两个变量按顺序传递。变量从下拉菜单表单中获取 PHP HTML表单 请帮忙 更新 当我删除$sort1和$sort2左右的引号时 我得到这个错误: 您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第4行“SORT”附近使用的正确语法 更新2 当我执行$sql=,没有通过mysql\u query传递它 我知道了 从论坛中选择主题id为“id”,主题标题为“标题”,主题标签为“标签”,主题所有者为“创建人”,主题日期为“创建日期”,主题顺序按id排序,不要使用引号,例如Php 通过MySQL语句将变量传递到ORDER,php,mysql,html,Php,Mysql,Html,我试图在MySQL语句中通过$variable1$variable2将两个变量按顺序传递。变量从下拉菜单表单中获取 PHP HTML表单 请帮忙 更新 当我删除$sort1和$sort2左右的引号时 我得到这个错误: 您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第4行“SORT”附近使用的正确语法 更新2 当我执行$sql=,没有通过mysql\u query传递它 我知道了 从论坛中选择主题id为“id”,主题标题为“标题”,主题标签为“标签”,主题所有者为“创建人”,主
ORDER BY 'ID' 'DESC'
这是不正确的。应该是
ORDER BY ID DESC
引号将id和desc转换为普通字符串,而不是关键字/字段名。删除括号并在排序元素之间添加逗号
ORDER BY $sort1 $sort2 ") or die (
编辑:进行以下更改,以便我们可以看到发生了什么
拿这条线
$topics = mysql_query(" SELECT topic_id AS 'ID', topic_head AS 'Title',
topic_tags AS 'TAGS', topic_owner AS 'CREATED BY', topic_date AS 'CREATED ON'
FROM forum_topics
ORDER BY '{$sort1}' '{$sort2}' ") or die (mysql_error());
将查询粘贴到变量中,用变量替换mysql_查询中的字符串
$query="SELECT topic_id AS 'ID', topic_head AS 'Title',
topic_tags AS 'TAGS', topic_owner AS 'CREATED BY', topic_date AS 'CREATED ON'
FROM forum_topics
ORDER BY '{$sort1}' '{$sort2}' ";
$topics = mysql_query($query) or die (mysql_error());
然后回显查询并将结果剪切/粘贴到问题。有些事情并不像你想象的那样发生
echo $query;
您需要删除“按顺序排列”值。另外,请注意,在别名值周围首选使用反勾号
还请注意,您应该使用mysqli_*或PDO,因为mysqli_*已被弃用。请在PHP.net上查看大多数与mysqli_*相关的功能中的红色大警告。您的列名似乎包含空格,因此您需要使用倒勾:
ORDER BY `{$sort1}` {$sort2}
还要注意,mysql\u real\u escape\u字符串在ORDER BY子句的情况下不提供任何保护。您需要对照允许输入的白名单检查您的输入。HTML表单中有两个名为“顺序”的元素,选择和提交按钮。删除了引号和逗号。。。误读您使用的两个排序变量是通过列分隔的,而不是通过排序和方向分隔的请参阅更新的响应。。。注意:我在我的数据库中保留了您的查询版本example@DotOyes如果该错误仍显示在“SORT”附近,则表明您仍在发送单引号。您的order by不正确。OP希望同时指定字段和排序方向。您正在改为使用两个字段。@MarcB是的,仔细查看表单,我认为您是对的。我将调整我的答案。@dot:将您的查询构建为$sql=..,这样您就可以回显正在构建的字符串。这总是一个好主意,尤其是在调试时——更容易看到真正的查询,而不仅仅是从错误消息中得到的片段。所以$sql,然后向我们显示您正在生成的查询。@DotOyes-您的提交按钮称为order-您选择的是该按钮的值,而不是具有相同名称的select。按ID排序的顺序是错误的。正如andrewsi所说,您的“提交”按钮与“排序依据”按钮的名称相同,并且“提交”按钮的值将覆盖“选择”按钮。另外请注意,列名中包含空格,因此需要倒勾。@andrewsi,我将“提交”按钮的名称更改为其他名称,但如果从下拉菜单中获取值,则仍然无法工作,这作为白名单有用吗?你认为什么是白名单?@Dot Oyes不,永远不要相信用户的输入。您需要硬编码列名和asc/desc顺序的列表。。。检查一下。任何人都可以将任何值发布到脚本中。
echo $query;
$topics = mysql_query("SELECT
topic_id AS `ID`,
topic_head AS `Title`,
topic_tags AS `TAGS`,
topic_owner AS `CREATED BY`,
topic_date AS `CREATED ON`
FROM forum_topics
ORDER BY {$sort1} {$sort2}'
") or die (mysql_error());
ORDER BY `{$sort1}` {$sort2}