разрывая струны с взрыва и вперед - PullRequest
6 голосов
/ 22 сентября 2009

Я пытаюсь получить строку php, чтобы разбить на отдельные слова, найти их в базе данных, а затем добавить результаты в другую базу данных ..

У меня в настоящее время есть строка, подобная этой

"SDGCC, ARISE, SDGFS"

Я хочу найти в таблице тегов входа теги, КАК эти слова, я использую это

SELECT * FROM logintags WHERE tag LIKE '% string%'

так, чтобы каждый тег был взят из строки, которую я пробовал использовать explode и foreach, но, похоже, он не дает желаемого эффекта.

$ string = $ _POST ['tags'];

$ tags = explode (',' $ string);

foreach ($ tag как $ key) {

$ query = mysql_query ("SELECT * FROM dept_logintags WHERE tag LIKE"% ". $ Key."% '"); $ r = mysql _fetch _object ($ query);

$ insert = mysql_query ("INSERT INTO briefings_logintags (id, briefing_id, logintag_id) VALUES (NULL, '$ id', '". $ R-> id. "')") ;

}

эффект, который я пытаюсь создать, заключается в том, что для каждого тега создается ссылка между идентификатором тега и идентификатором брифинга ...

Однако, похоже, в базу данных помещается только одна правильная запись.

Ответы [ 3 ]

28 голосов
/ 22 сентября 2009

Попробуйте

$tags = explode(',',$string);

foreach($tags as $key) {    
    echo '"'.$key.'"<br/>';    
}

Я предполагаю, что вы получаете пробел до ARISE и SDGFS.

Кроме того, убедитесь, что вы всегда экранируете строки , прежде чем помещать их в запросы MySQL !! В противном случае кто-то может отправить нечестные данные на ваш сервер и нанести ущерб вашей базе данных. (Это называется SQL-инъекция .)

3 голосов
/ 22 сентября 2009

Если после запятой в исходной строке есть пробел, то explode () вернет что-то вроде ["SDGCC", "ARISE", "SDGFS"].

Это приведет к тому, что предложение LIKE будет соответствовать только первому слову. Попробуйте использовать trim ():

$word=trim($key);
$safe=mysql_real_escape_string( $word );
$query=mysql_query("SELECT * FROM dept_logintags WHERE tag LIKE '%".$safe."%'");

РЕДАКТИРОВАТЬ: Как упоминал Артелиус, всегда избегайте пользовательских данных, чтобы предотвратить внедрение SQL.

0 голосов
/ 15 октября 2009

Пожалуйста, ради любви к Интернету, не создавайте SQL-запрос самостоятельно. Используйте PDO .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...