我只是想用php将这些对象插入到表中。
$sql = 'INSERT INTO table VALUES( '.$active.' , '.$id.' , '.$time.' , '.$url.' ,"some string" )';
上述代码中的网址为:http://www.youtube.com/watch?v=sAYc3gGjYW8
当我将url列留空时,它可以工作,当我在其中放入一个url然后它不起作用,我得到以下错误。
“错误:您的SQL语法中有错误;请查看与您的MySQL服务器版本对应的手册,以便在附近使用正确的语法 '://www.youtube.com/watch?v = sAYc3gGjYW8,“some string”)' 在第1行。“
问题:
为什么网址不像普通字符串那样插入?
在MySQL接受之前,我需要在url_string上执行某种功能吗?
PS - url列目前是VARCHAR(256)。
任何帮助赞赏的人......
答案 0 :(得分:7)
你没有逃避你的输入。 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'
相同
答案 1 :(得分:3)
虽然我完全同意mysql_real_escape_string()
条评论,但您似乎忘记将网址包含在引号中,就像任何其他字符串一样。
$sql = 'INSERT INTO table VALUES( '.$active.' , '.$id.' , '.$time.' , "'.$url.'" ,"some string" )';
你可以通过查看MySQL错误来判断:
://www.youtube.com/watch?v=sAYc3gGjYW8 ,"some string" )
网址末尾没有引号:)
答案 2 :(得分:2)
你需要逃避你的输入。请查看mysql_real_escape_string
或mysqli_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表达式,否则您之前已将它们转义。
答案 3 :(得分:1)
确保您已使用mysql_real_escape_string($string)
之类的内容将所有输入转义到数据库中。它将阻止你对SQL注入攻击开放,并确保正确读取字符串。
答案 4 :(得分:-1)
$id = $_GET['id'];$name = $_GET['name'];$lat = $_GET['lat'];$long = $_GET['long'];
$query = mysql_query("INSERT INTO dbname.tablename (
ID为,
{名称{1}} LAT ,
{长{1}}