使用preg_split(“/,/”时出现SQL语法错误,

时间:2010-11-27 13:05:07

标签: php mysql twitter preg-split

我使用preg_split从tweet message-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')

1 个答案:

答案 0 :(得分: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

我指出的四个双引号将" code"到文字文本字符串。您并未尝试拆分strip_tags函数调用的结果,而是尝试拆分表示" strip_tags(etc ...)"的字符串。删除双引号,以便PHP看到它是函数调用,而不是字符串。

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

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

mysql_real_escape_string(strip_tags(etc...))

数据库插入的转义应该是插入之前的最后一件事。 strip_tags可能会改变逃逸的顺序并产生“坏”的错误。字符串,让你接受SQL注入攻击。