使用$_GET变量的等式排序mysql表


ordering mysql table using an equation with $_GET variables

这是我想做的

{
{
    $sql="SELECT ISO_id,gdp,population,country_name,gold,silver,bronze,total FROM Country ORDER BY (46034/($_GET["x"]*bronze)+($_GET["y]*silver]+(z*gold)*(gdp/population))"; // chosen to order my html table with the number the medals each country won at the olympics
    }
    }

然而,我不知道如何包括$_GET内的语句

要在当前语句中使用$_GET参数,请使用:

$sql="
    SELECT ISO_id,gdp,population,country_name,gold,silver,bronze,total 
    FROM Country
    ORDER BY (46034/(" . $_GET["x"] . "*bronze)+(" . $_GET["y"] . "*silver]+(z*gold)*(gdp/population))";

但是,请注意,这会使您对SQL注入攻击敞开大门,因此您应该考虑在将其用于此类查询之前过滤您的输入。具体请参见如何在PHP中防止SQL注入?

另外,请注意,正如长崎在评论中所说,你们的ORDER BY条款中似乎有一个错误。

$sql="SELECT 
    ISO_id,
    gdp,
    population,
    country_name,
    gold,
    silver,
    bronze,
    total,
    (46034/(" . $_GET["x"] . "*bronze)+(" . $_GET["y"] . "*silver]+(z*gold)*(gdp/population)) as number_medals
FROM Country
ORDER BY number_medals";

小心sql注入....

这是一个好主意,首先把get变量变成一个单独的变量,然后从那里清理它,因为把get变量直接放入SQL语句会让你打开SQL注入。

假设url是这样的。http://www.mysite.com?ID=4为了得到id,你会去$_GET[ID]或者$ ID = $_GET[ID],从这里做一些工作来清除ID中的任何坏数据。http://php.net/manual/en/function.mysql-real-escape-string.php这将帮助你一点,但仍然不是100%的节省。

我记得当我试图弄清楚这一点,我不想看替代品,我只是想让它工作,但一个建议是使用PDO准备的语句。它们一开始很难理解,但是这个指南很好,并且会很容易地解释如何做到这一点。PDO使你免受sql注入。

PDO预处理语句教程

添加大括号

{{$ sql="SELECT ISO_id,gdp,population,country_name,gold,silver,bronze,total FROM Country ORDER BY (46034/({$_GET["x"]}*bronze)+({$_GET["y]}*silver]+(z*gold)*(gdp/population))";//选择用每个国家在奥运会上获得的奖牌数排序我的HTML表格}}