我使用此查询获取用户名数据表,所以如果我写url index.php?user=username
获取用户数据基于用户名,如果index.php和数据表重定向到管理表这个我的查询
如果我根据用户名编写url index.php?user=username
数据显示,但是如果写index.php数据不显示,那么它是有用的。
此查询有什么问题,谢谢
if(isset($_GET['user'])) {
$result = mysql_query("select * from content_table where username = '" . $_GET['user'] . "' limit 2 ;");
if(!empty($GET['user'])){
$result = mysql_query("select * from content_table order by content_id desc limit 1;");
}
答案 0 :(得分:1)
我暂时不考虑SQL注入问题。首先,你缺少一个结束大括号。第二个问题是你没有正确地做第二部分。你有:
if(isset($_GET['user'])) {
// query based on username
if(!empty($GET['user'])){
// query just first row
}
第二次检查与第一次检查相同 - 不需要它。你的逻辑应该是:
if(!empty($_GET['user'])) {
// query based on username
}
else {
// query just first row
}
请注意,您还需要在某处处理空结果。
现在,至于你的SQL注入漏洞,想象一下传入的用户名为myname'; drop table content_table --
的一秒钟 - 你的代码只会将其放入并执行它 - 删除表。想一想。
哦,请帮个忙,停止使用mysql_
函数 - 切换到PDO或至少mysqli_
。
答案 1 :(得分:0)
试试这个
if(empty($GET['user'])){
$result = mysql_query("select * from content_table order by content_id desc limit 1;");
}
if(isset($_GET['user'])) {
$result = mysql_query("select * from content_table where username = '" . $_GET['user'] . "' limit 2 ;");
答案 2 :(得分:0)
您向前进行了empty
测试。因此,当参数为空时,您永远不会执行任何一个查询。
这样做:
if (empty($_GET['user'])) {
$result = mysql_query("select * from content_table order by content_id desc limit 1;");
} else {
$result = mysql_query("select * from content_table where username = '" . $_GET['user'] . "' limit 2 ;");
}
empty()
首先执行isset
测试,因此您无需同时执行这两项测试。