使用 preg_split("/,/", 时出现 SQL 语法错误
我使用 preg_split 从推文消息 ID 中删除标签信息,这是 Twitter 的原始输出
标签:search.twitter.com,2005:7551711354822656
我应用 preg_split 来摆脱 'tag:search.twitter.com' 就像
$arr = preg_split("/,/", "strip_tags(mysql_real_escape_string($status->id))");
$msg_ID = $arr[1];
&将 $msg_ID[1] 插入表中。现在我将相同的内容应用于 Twitter 输出的消息内容,
#DIYse_D DELIVERAB: twitter messages 1, 9th OCT 2010
我应用 preg_split 来从中删除“twitter messages 1”,例如
$arr2 = preg_split("/,/", "strip_tags(mysql_real_escape_string($status->content))");
$msg = $arr[1];
&将 $msg[1] 插入表中,但会引发 sql 语法错误。好的,这里的一件事是,在 $ status->id 输出中,twitter 在 id 的开头添加了标签,而在这里它在原始消息内容中添加了“twitter messages 1”。
这是 SQL 插入查询
INSERT INTO msg2(id,msg,msg_id,depth,name) VALUES ('','$msg','$msg_ID','0','$name')
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我指出的四个双引号将这些“代码”位转换为文字文本字符串。您不是在尝试拆分 strip_tags 函数调用的结果,而是在尝试拆分显示“strip_tags(etc...)”的字符串。删除双引号,这样 PHP 就会认为这是一个函数调用,而不是一个字符串。
由于该文字字符串中没有逗号,因此不会有任何
$arr2[1]
值,因此您尝试在数据库中插入空白(或 null)。另外,将您的函数顺序更改为:
转义数据库插入应该是插入之前要做的最后一件事。 strip_tags 可能会更改转义的顺序并产生“错误”字符串,从而使您容易受到 SQL 注入攻击。
The four double-quotes I've indicated turn those bits of "code" into literal text strings. You're not trying to split the results of a strip_tags function call, you're trying to split a string that says "strip_tags(etc...)". Remove the double quotes so PHP will see that it's a function call, and not a string.
Since there's no commas in that literal string, there won't be any
$arr2[1]
value, so you're trying to insert a blank (or a null) into the database.As well, change your function sequence to:
Escaping for database insert should be the LAST thing you do before inserting. It's possible that strip_tags may change the ordering of the escapes and produce a 'bad' string, leaving you open to SQL injection attacks.