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

发布于 2024-10-04 21:25:38 字数 914 浏览 2 评论 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] 插入表中。现在我将相同的内容应用于 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')

I used preg_split to remove the tag info from tweet message-id like, this is original output from Twitter

tag:search.twitter.com,2005:7551711354822656

I apply preg_split to get rid of 'tag:search.twitter.com' like

  $arr = preg_split("/,/", "strip_tags(mysql_real_escape_string($status->id))");
  $msg_ID =  $arr[1];

& insert $msg_ID[1] into table. Now I apply same to message-content whose twitter output is

  #DIYse_D  DELIVERAB: twitter messages 1, 9th OCT 2010

I apply preg_split to get rid of 'twitter messages 1' from it like

  $arr2 = preg_split("/,/", "strip_tags(mysql_real_escape_string($status->content))");
  $msg =  $arr[1];

& insert $msg[1] into table but it raises sql syntax error. OK, one thing here is that in $ status->id output, twitter added tag at the start of id while here it added 'twitter messages 1' inside the original message contents.
Here is SQL Insert Query

INSERT INTO msg2(id,msg,msg_id,depth,name) VALUES ('','$msg','$msg_ID','0','$name')

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

○闲身 2024-10-11 21:25:38
$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] 值,因此您尝试在数据库中插入空白(或 null)。

另外,将您的函数顺序更改为:

mysql_real_escape_string(strip_tags(etc...))

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

$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

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:

mysql_real_escape_string(strip_tags(etc...))

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文