爆炸和搜索 - > MYSQL

时间:2015-04-15 20:18:41

标签: php mysql

我的标记字符串保存为$value

$value等于'my,name,is'

我现在要分开$value并在我的数据库中搜索包含(例如:'name')的每一行......

我试过这样做 - >

$value = explode(',' , $value);


$query = "SELECT * FROM table WHERE words LIKE '%$value%'    ";

但这似乎不起作用..

请帮忙:)
非常感谢,

我会感激任何答案......

3 个答案:

答案 0 :(得分:0)

php explode()返回数组。 所以你需要使用$ value [0]等

或使用foreach循环:

$value = explode(',' , $value);
$i = 0;
$len = count($value);
$q = ' ';
foreach ($value as $val) {
    $q .= 'words LIKE '.$val.' ';
    if ($i != $len - 1) {
        $q .= ' OR ';    
    }
    $i++;
}
$query = "SELECT * FROM table WHERE '$q'";

没有测试过,但你明白了。如果您还需要其他任何评论。

编辑:

$value = 'name,is,my,etc';
$vals = explode(',', $value);

$i = 0;
$len = count($vals);

$string = '(';
foreach ($vals as $v) {
    $string .= "'".$v."'";
    if ($i != $len - 1) {
        $string .= ',';    
    }
    $i++;
}
$string .= ')';

echo $string;

这将回应:('name','is','my','etc') 您可以将其粘贴到此处并查看结果 http://writecodeonline.com/php/

答案 1 :(得分:0)

不可能如所写。 $value将成为一个数组。在字符串上下文中使用数组时,它将成为文字文本Array

如果您想对该阵列的每个成员执行like,则查询必须如下所示

SELECT ... WHERE words LIKE '%value1%' OR words LIKE '%value2' OR ....

这意味着将您的字符串扩展为数组,然后使用'% ... %'OR LIKE业务包装该数组的每个成员。


评论后续:

$parts = explode(',', $value);
$in_clause = "'" . implode("','", $parts) . "'";
$sql = "SELECT ... IN ($in_clause)";

但请注意,这会让您对SQL注入攻击持开放态度。

答案 2 :(得分:0)

需要逐步学习

1)首先在后端获取完整字符串,例如“ expertsuggestion.com中的工作方式和赚钱方法”

2)按空格爆炸字符串

3)制作一个空数组。

4)foreach每次爆炸字符串传递都一个一个地查询,并将结果数组查询推入空数组

5)然后,您可以从数组中删除重复的ID。

6)您获得了最终的阵列。

相关问题