Mysql中的数组WHERE LIKE?

时间:2012-02-24 17:26:53

标签: php mysql arrays

我需要使用数组列表进行SELECT。 $array_name包含:

Array ( [0] => gum.cn [1] => lol.com. [2] => ns1.blar.com [3] => test.com [4] => web.cn. )
  

的print_r($ ARRAY_NAME);

  $string = implode(',',$array_name);


    $tank = "SELECT url FROM `PHP`.`db` WHERE url LIKE '%{$string}%'";
    $result1 = mysql_query($tank); 
      while ($jwp = mysql_fetch_array($result1)) 
      {     
      echo $jwp['url']; 
      echo "<br>"; 
      }

为什么不进行上述工作?我搜索其他示例,问题是在不使用LIKE子句的情况下进行查询,因此没有解决方法。请提前帮助,谢谢。

6 个答案:

答案 0 :(得分:32)

它不起作用,因为您的查询将扩展为:

SELECT url FROM `PHP`.`db` WHERE url LIKE '%gum.cn,lol.com.,ns1.blar.com...%'

您必须稍微修改一下您的查询:

$query_parts = array();
foreach ($array_name as $val) {
    $query_parts[] = "'%".mysql_real_escape_string($val)."%'";
}

$string = implode(' OR url LIKE ', $query_parts);

$tank = "SELECT url FROM `PHP`.`db` WHERE url LIKE {$string}";

答案 1 :(得分:1)

/ *数组* /

中的数据
$array_name = array("gum.cn","lol.com","ns1.blar.com","test.com","web.cn");

/ *将数组元素连接到带分隔符(空格)&#34;的字符串中。 &#34; * /

echo $string = implode(" ", $array_name); 
// output: gum.cn lol.com ns1.blar.com test.com web.cn

/ *替换分隔符(空格)&#34; &#34;用&#34;%&#39; OR&#39;%&#34; * /

echo $string = str_replace(" ", "%' OR '%", $string);
// output: gum.cn%' OR '%lol.com%' OR '%ns1.blar.com%' OR '%test.com%' OR '%web.cn

/ *插入查询sql * /

$tank = "SELECT url FROM `PHP`.`db` WHERE url LIKE 
  

&#39;%$字符串%&#39;

&#34 ;;

答案 2 :(得分:0)

它不会起作用,因为它会尝试匹配(例如)&#39; gum.cn&#39;的数据库值。与&#39;%gum.cn,lol.com,.....%&#39;,这将永远不会成真。

而是这样做:

foreach ($array_name as $string) {
    $tank = "SELECT url FROM `PHP`.`db` WHERE url LIKE '%{$string}%'";
    $result1 = mysql_query($tank); 
    echo $jwp['url']; 
    echo "<br>"; 
}

希望有所帮助。

答案 3 :(得分:0)

因为它生成了无效的SQL(好的,技术上有效,它只是不会按照你的想法去做)

SELECT url FROM `PHP`.`db` WHERE url LIKE '%a,b,c,d,%'

您要么必须附加多个LIKE语句。除非您正在进行精确的字符串匹配查询,否则Implode不会用于此任务。即使这样,你也需要调整代码。

答案 4 :(得分:0)

使用IN子句,但要确保引用和转义值:

//TODO: escape $array_name values

$string = implode("','",$array_name); //ensure quoted values

$tank = "SELECT url FROM `PHP`.`db` WHERE url IN ('$string')";

答案 5 :(得分:0)

/ **  *内置多维数组值,在与“[]”块不同时对字符进行分组。  * @param array $ array要内爆的数组  * @return string内爆数组  * / 函数hoArray2SqlLike($ array) {     if(!is_array($ array))返回$ array;

$values  = array();
$strings = array();

foreach ( $array as $value )
{
    foreach ( str_split( $value ) as $key => $char )
    {
        if ( ! is_array( $values[ $key ] ) )
        {
            if ( isset( $values[ $key ] ) )
            {
                if ( $values[ $key ] != $char )
                {
                    $values[ $key ]     = array( $values[ $key ] );
                    $values[ $key ][]   = $char;
                }
            }
            else
                $values[ $key ] = $char;
        }
        elseif ( ! array_search( $char , $values[ $key ] ) )
            $values[ $key ][] = $char;
    }
}

foreach ( $values as $value )
{
    if ( is_array( $value ) )
        $value = '['.implode( '', $value ).']';

    $strings[] = $value;
}

return implode( '', $strings );

}