用爆炸和foreach打破弦乐

时间:2009-09-22 11:07:05

标签: php mysql many-to-many

我正在尝试将php字符串分解为单个单词,在数据库中搜索它们,然后将结果添加到另一个数据库中。

我目前有这样的字符串

“SDGCC,ARISE,SDGFS”

我想在登录标签表中搜索标签,好像这些单词我正在使用这个

  

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

这样每个标签都取自我尝试过使用explode和foreach的字符串,但它似乎没有达到预期的效果。

  

$ string = $ _POST ['tags'];

     

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

     

foreach($ tag as $ key){

     
    

$ query = mysql_query(“SELECT * FROM dept_logintags WHERE tag LIKE'%”。$ key。“%'”);     $ r = mysql _fetch _object($ query);

         

$ insert = mysql_query(“INSERT INTO briefings_logintagsidbriefing_idlogintag_id)VALUES(NULL,'$ id','”。$ r- > ID “')”);

  
     

}

我正在尝试创建的效果是为每个标记创建标记ID和简报ID之间的引用...

但似乎只是在数据库中放入一个正确的条目。

3 个答案:

答案 0 :(得分:28)

尝试

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

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

我的猜测是你在ARISE和SDGFS之前获得了一个空间。

另外,在将它们放入MySQL查询之前,请确保始终escape strings正确!否则,有人可能会将受污染的输入发送到您的服务器并对您的数据库造成严重破坏。 (这称为SQL injection。)

答案 1 :(得分:3)

如果原始字符串中的逗号后面有空格,则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."%'");

编辑:正如Artelius所提到的,总是逃避用户提交的数据以防止SQL注入。

答案 2 :(得分:-7)

为了热爱互联网,请不要自己构建SQL查询。使用PDO