【问题标题】:Php - trying to insert urls into a MySQL tablePhp - 尝试将 url 插入 MySQL 表
【发布时间】:2011-09-04 12:51:40
【问题描述】:

我只是想用 php.ini 将这些对象插入到一个表中。

$sql = 'INSERT INTO table VALUES( '.$active.' , '.$id.' , '.$time.' , '.$url.' ,"some string" )';

以上代码中的url为:http://www.youtube.com/watch?v=sAYc3gGjYW8

当我将 url 列留空时,它可以工作,当我将 url 放入其中时,它就不起作用,并且出现以下错误。

“错误:您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本对应的手册,以获取正确的语法以在附近使用 '://www.youtube.com/watch?v=sAYc3gGjYW8 ,"一些字符串")' 在第 1 行。”

问题:

为什么 url 不能像普通字符串一样插入?

在 url_string 被 MySQL 接受之前,我需要对其执行某种功能吗?

PS - url 列当前是 VARCHAR(256)。

任何帮助感谢大家...

【问题讨论】:

    标签: php mysql url insert


    【解决方案1】:

    $id = $_GET['id'];$name = $_GET['name'];$lat = $_GET['lat'];$long = $_GET['long']; $query = mysql_query("INSERT INTO dbname.tablename (id,name,lat,long) VALUES ('".$id."','".$name."','".$lat."','".$long."')");

    【讨论】:

    • 它只需添加 ('id','name','lat','long') 使引号像这样;同时按 altgr 和逗号稍后按空格按钮
    【解决方案2】:

    确保您已使用mysql_real_escape_string($string) 之类的方式将所有输入转义到数据库中。它会阻止您对 SQL 注入攻击持开放态度,并确保正确读取字符串。

    【讨论】:

      【解决方案3】:

      虽然我完全同意 mysql_real_escape_string() cmets,但您似乎忘记将 URL 括在引号中,就像任何其他字符串一样。

      $sql = 'INSERT INTO table VALUES( '.$active.' , '.$id.' , '.$time.' , "'.$url.'" ,"some string" )';
      

      你可以通过查看 MySQL 错误来判断:

      ://www.youtube.com/watch?v=sAYc3gGjYW8 ,"some string" )
      

      网址末尾没有引号:)

      【讨论】:

        【解决方案4】:

        您需要转义您的输入。看看mysql_real_escape_stringmysqli_real_escape_string。您可能还想查看像 PDO 这样的数据库抽象层。

        假设您使用的是mysql_* 过程函数,并且在您连接到数据库后,您的脚本应该如下所示:

        $sql = 'INSERT INTO table VALUES( '.$active.' , '.$id.' , '.$time.' , "'.mysql_real_escape_string($url).'" ,"some string" )';
        

        我也强烈建议转义其他值:

        $sql = 'INSERT INTO table VALUES( "'.mysql_real_escape_string($active).'" , "'.mysql_real_escape_string($id).'" , "'.mysql_real_escape_string($time).'" , "'.mysql_real_escape_string($url).'" ,"some string" )';
        

        除非它们是 SQL 表达式或者您之前已经对它们进行了转义。

        【讨论】:

          【解决方案5】:

          您没有逃避输入。 mysqli_real_escape_string() 是你的朋友。

          记住所有输入都是邪恶的。验证和清理,否则您将受到一大堆讨厌的事情,从超出范围的数据(例如,当字段为 varchar(10) 时为 124 个字符长的字符串)到打开代码以进行 SQL 注入漏洞利用。

          例子:

          $safe_url = mysqli_real_escape_string($database_connection_object, $url);
          

          此外,您可能希望节省一些击键,将该字符串更改为双引号字符串并插入变量 - 即 "blah blah $some_var foo foo"'blah blah ' . $some_var . ' foo foo' 相同

          【讨论】:

            猜你喜欢
            • 2016-08-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多