为什么我得到一个SQL错误时,有一个撇号在我的URL结束



当我将'添加到URL末尾时,为什么会出现错误?例如:http://mywebsite.com/singel?id=24'

我得到以下错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' LIMIT 1' at line 1

如果我将'放在查询字符串中的任何id之后,这将在任何地方显示。

出了什么问题,如何解决?谢谢你。

在SQL查询中插入一个未转义的变量。如果这个变量恰好包含SQL特殊字符,这可能会导致SQL语法错误,甚至更糟。

在SQL查询中插入变量之前需要转义。

的例子:

$query = "SELECT * FROM users WHERE id = " . mysql_real_escape_string($id);

代替(this is WRONG, don't do this):

$query = "SELECT * FROM users WHERE id = $id LIMIT 1";

如果$id24',查询变成:

$query = "SELECT * FROM users WHERE id = 24' LIMIT 1";

可以看到,24后面有一个',这是一个语法错误。

如果'杀死了您的查询,则很明显存在sql注入漏洞。阅读mysql_real_escape_string(), bobby-tables,并考虑切换到PDO预处理语句。

看这里

http://www.codeproject.com/KB/database/SqlInjectionAttacks.aspx

你应该学习一些关于SQL注入的知识。你的脚本现在是可注入的

此错误通常意味着您对sql注入是开放的。这个函数比mysql_real_escape_string()稍微复杂一点,因为它还执行PHP配置测试,以确保您不会两次转义数据,并添加各种PHP版本支持!(根据PHP手册1)只需在每个提交的条目上运行这个漂亮的小函数,用于插入、更新或where语句:

function sql_injection($value){
    $value = trim($value);
    if(get_magic_quotes_gpc())
        $value = stripslashes($value);
    if(function_exists("mysql_real_escape_string")){
        $value = mysql_real_escape_string($value);
    }else
        $value = addslashes($value);
    return $value;
}

,

$q = 'SELECT `blah` FROM `users` WHERE `id`='.sql_injection($_POST['id']);
  • 这个函数不能取代服务器端验证,在使用它之前应该验证所有东西,总是假设最坏的情况:)

相关内容

最新更新