查询WHERE id='出错.美元是强生的# 39;为公共档案系统


Sql Error on an query WHERE id='. $something .' For Public Profile System

我正在制作一个公共个人资料系统,如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。