行顺序错误

时间:2014-09-08 11:07:28

标签: php mysql sql

当我写这个查询时:

$query_Recordset1 = "SELECT * FROM `control de proyectos` ORDER BY ".$_GET['ordenar']." ASC";

出现以下错误:

  

您的SQL语法有错误;检查手册   对应于您的MySQL服务器版本,以便使用正确的语法   在第1行'ASC'附近

有谁知道为什么?

编辑我不得不说我已经制作了一些按钮来订购这样的行:

<input type="button" value="Ordenar por Numero de proyecto"       onclick="location.href='VistaControl(Pgmaestra).php?ordenar=Numero de proyecto';"/>

2 个答案:

答案 0 :(得分:0)

$ordenar =$_GET['ordenar'];

if(isset($ordenar))
 {
   $query_Recordset1 = "SELECT * FROM `control de proyectos` 
                         ORDER BY '".$ordenar."'  ASC";

}

答案 1 :(得分:0)

您似乎有很长的表名和列名,例如control de projectosNumero de proyecto。虽然这些名称在MySQL中可以正常运行,但许多人认为它们在编写查询时很难使用。你在这里的经历证实了这种信念。

您想要的查询是(我相信):

SELECT * FROM `control de proyectos` ORDER BY `Numero de proyecto` ASC

请注意围绕长表和列名称的反引号。您的PHP代码不能正确生成反引号。你需要的是这样的东西。

$query_Recordset1 = "SELECT * FROM `control de proyectos` 
                      ORDER BY `" . $_GET['ordenar'] . "`  ASC";

这会将反引号放在正确的位置,以使您的查询有效。

现在看:在评论中,人们已经说过直接使用$_GET[]操作的结果创建查询是危险的。这是非常正确的。破解者 - 所谓的脚本小子 - 有各种廉价的网站破解脚本,寻找这些类型的漏洞。他们甚至不需要技能来做到这一点。如果你使用这种代码,一些脚本小子将攻击并销毁你的网站。

请查看如何在ORDER BY子句中避免SQL注入。例如:Prevent SQL Injection in ORDER BY clause