Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过MySQL语句将变量传递到ORDER_Php_Mysql_Html - Fatal编程技术网

Php 通过MySQL语句将变量传递到ORDER

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”,主题标题为“标题”,主题标签为“标签”,主题所有者为“创建人”,主

我试图在MySQL语句中通过$variable1$variable2将两个变量按顺序传递。变量从下拉菜单表单中获取

PHP HTML表单 请帮忙

更新

当我删除$sort1和$sort2左右的引号时

我得到这个错误: 您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第4行“SORT”附近使用的正确语法

更新2

当我执行$sql=,没有通过mysql\u query传递它 我知道了

从论坛中选择主题id为“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}