我正在制作一个公共个人资料系统,如facebook,youtube.....当用户注册它创建它自己的配置文件与他的信息,并给它一个url,如"www.mysite.com/userprofile.php?id=1"
,可以看到任何人没有登录,任何访问该url可以看到的配置文件,userprofile.php从数据库中获取数据。下面是我的代码:
<?php
$id = $_GET["id"];
$query = ("SELECT username,email FROM table WHERE id=" . $id . " LIMIT 1");
$result = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_array($result)){
echo $row['username']. " - ". $row['email']; }
?>
它在访问"www.mysite.com/userprofile.php?id=1"
时工作,它获得id为1的用户信息,然后回显它们,但是当我访问"www.mysite.com/userprofile.php"
时,它给出这个sq错误:
你的SQL语法有错误;查看与MySQL服务器版本对应的手册,了解在第1行'LIMIT 1'附近使用的正确语法
即使我删除了"LIMIT 1",它也会给出这个错误:
你的SQL语法有错误;查看与MySQL服务器版本对应的手册,了解在"at line 1
"附近使用的正确语法。
还有一件事,如果有人修复了错误,你能告诉我如何使"www.mysite.com/userprofile.php?id=1"
到"www.mysite.com/user1"
以及如何在用户配置文件不存在时返回404错误吗?
和任何方法来保护它从sql注入?
谢谢预支:)
当你导航到/userprofile.php
而不是/userprofile.php?id=123
时,你实际上是在运行这个查询:
SELECT username,email FROM table WHERE id= LIMIT 1
无效的SQL语句。有许多方法可以修复它,但最简单的方法可能是这样的:
<?php
$id = $_GET["id"];
if(!empty($id)) {
// typecast it for at least a little security
$query = ("SELECT username,email FROM table WHERE id=" . (int) $id . " LIMIT 1");
$result = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_array($result)){
echo $row['username']. " - ". $row['email']; }
} else {
echo "Please provide a user ID."
}
检查用户ID是否已设置且不为空,并在运行查询之前将其类型转换为int型。
说了这么多,你应该好好研究一下mysqli或PDO。