这是我想做的
{
{
$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表格}}