用爆炸和foreach打破弦乐

Nei*_*man 6 php mysql many-to-many

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

我目前有这样的字符串

"SDGCC,ARISE,SDGFS"

我想在登录标签表中搜索标签LIKE这些单词我正在使用它

SELECT*FROM logintagsWHERE tagLIKE'%string%'

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

$ string = $ _POST ['tags'];

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

foreach($ tag as $ key){

$ query = mysql_query("SELECT*FROM dept_logintagsWHERE tagLIKE'%".$ key."%'"); $ r = mysql _fetch _object($ query);

$插入=请求mysql_query( "INSERT INTO briefings_logintags(id,briefing_id,logintag_id)VALUES(NULL, '$ ID', '" $ R-> ID. "')");

}

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

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

Art*_*ius 29

尝试

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

foreach($tags as $key) {    
    echo '"'.$key.'"<br/>';    
}
Run Code Online (Sandbox Code Playgroud)

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

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


ctf*_*ord 4

如果原始字符串中的逗号后面有空格,则explode() 将返回类似["SDGCC", " ARISE", " SDGFS"] 的内容。

这将导致您的 LIKE 子句仅匹配第一个单词。尝试使用修剪():

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

编辑:正如 Artelius 提到的,始终转义用户提交的数据以防止 SQL 注入。