0

我使用 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] 插入表中。现在我将同样的应用到推特输出为的消息内容

  #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')
4

1 回答 1

2
$arr = preg_split("/,/", "strip_tags(mysql_real_escape_string($status->id))");
                         ^--here                                           ^--here
$arr2 = preg_split("/,/", "strip_tags(mysql_real_escape_string($status->content))");
                           ^---here                                              ^---here

我指出的四个双引号将这些“代码”位转换为文字文本字符串。您不是要拆分 strip_tags 函数调用的结果,而是要拆分一个显示“strip_tags(etc...)”的字符串。删除双引号,以便 PHP 将看到它是一个函数调用,而不是一个字符串。

由于该文字字符串中没有逗号,因此不会有任何$arr2[1]值,因此您尝试将空白(或空值)插入数据库。

同样,将您的功能序列更改为:

mysql_real_escape_string(strip_tags(etc...))

数据库插入的转义应该是您在插入之前做的最后一件事。strip_tags 可能会更改转义的顺序并产生“坏”字符串,从而使您容易受到 SQL 注入攻击。

于 2010-11-27T13:31:32.577 回答