我在尝试将URL添加到mySQL数据库时遇到问题。
该字符串是一个 URL:
http://pbs.twimg.com/profile_images/1708867059/405000_10150426314376065_707061064_8645107_703731598_n_normal.jpg
我得到的错误是:
Error description: 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 '://pbs.twimg.com/profile_images/1708867059/405000_10150426314376065_707061064_86' at line 1
似乎它不允许我添加 URL,我认为某些字符有问题,但我不知道是什么?
我的SQL是:
INSERT INTO accounts (name,consumerkey,consumersecret,pic_url) VALUES ($twitterID,$consumerkey,$consumersecret,$picture_url)"
你不能通过在定制的sql字符串中添加几个字符(如'
或"
)来真正解决这类问题!
相反,了解用php编写sql的真正方法(这就像一个非常糟糕的秘密),即使用PDO语句。 这将允许您使用像 (:twitterID, :consumerKey, :consumerSecret, :pictureUrl)
这样的 placehoder,它将接受复杂的变量,例如 url 和用户发送的任何垃圾,更加优雅。
从长远来看,这将为您节省很多麻烦和时间。
你需要引用字符串值和SQL会抱怨的任何其他字符,在这种情况下是冒号;见下文。
($twitterID,$consumerkey,$consumersecret,'$picture_url')
或
('".$twitterID."','".$consumerkey."','".$consumersecret."','".$picture_url."')
如果您想引用所有值。
旁注:您可以删除整数变量两边的引号。
即:
这基于并且没有看到其余代码的外观:
$picture_url = "http://pbs.twimg.com/profile_images/1708867059/405000_10150426314376065_707061064_8645107_703731598_n_normal.jpg";
- 错误指出它接近
:
- 接近就是冒号。
...在 '://pbs.twimg.com 附近使用的正确语法 ^就在那儿
您还可以使用:
VALUES ($twitterID, $consumerkey, $consumersecret, '" .$dbcon->real_escape_string($picture_url) . "')";
$dbcon
是数据库连接变量的一个示例,基于 mysqli_
语法。
还没有说明你正在使用哪个MySQL API。
- 另外,您当前的代码可以进行SQL注入。
使用预准备语句,或将 PDO 与预准备语句一起使用。