Ошибка синтаксиса SQL при использовании preg_split ("/, /", - PullRequest
0 голосов
/ 27 ноября 2010

Я использовал preg_split для удаления информации тега из идентификатора твита, например, это оригинальный вывод из Twitter

tag: 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, чтобы избавиться от 'твиттер-сообщений 1', например

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

и вставляю $ msg [1] в таблицу, но это вызывает ошибку синтаксиса sql.Хорошо, одна вещь здесь заключается в том, что в выводе $ status-> id твиттер добавил тег в начале идентификатора, в то время как здесь он добавил «твиттер сообщения 1» в оригинальном содержимом сообщения.
Вот запрос вставки SQL

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

1 Ответ

2 голосов
/ 27 ноября 2010
$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 (и т.д ...)". Удалите двойные кавычки, чтобы PHP увидел, что это вызов функции, а не строка.

Поскольку в этой литеральной строке нет запятых, никакого значения $arr2[1] не будет, поэтому вы пытаетесь вставить пустой (или нулевой) в базу данных.

Также измените последовательность функций на:

mysql_real_escape_string(strip_tags(etc...))

Экранирование для вставки в базу данных должно быть последним, что вы делаете перед вставкой. Вполне возможно, что strip_tags могут изменить порядок экранирования и создать «плохую» строку, оставляя вас открытыми для атак с использованием SQL-инъекций.

...