【问题标题】:breaking up strings with explode and foreach用explode和foreach分解字符串
【发布时间】:2009-09-22 11:07:04
【问题描述】:

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

我目前有这样的字符串

“SDGCC、ARISE、SDGFS”

我想在登录标签表中搜索标签,比如我正在使用的这些词

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

所以每个标签都是从我尝试过使用 explode 和 foreach 的字符串中获取的,但它似乎没有达到预期的效果。

$string = $_POST['tags'];

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

foreach($tags as $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."')") ;

}

我试图创建的效果是为每个标签创建标签 ID 和简报 ID 之间的引用...

然而,它似乎只在数据库中放入了一个正确的条目。

【问题讨论】:

    标签: php mysql many-to-many


    【解决方案1】:

    试试

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

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

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

    【讨论】:

      【解决方案2】:

      如果原始字符串中的逗号后面有空格,则 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 注入。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-13
        • 1970-01-01
        • 2015-12-08
        • 2013-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-09
        相关资源
        最近更新 更多