php Mysql中的数组在哪里?

nsc4cvqm  于 2023-03-16  发布在  PHP
关注(0)|答案(7)|浏览(130)

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

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

打印r($数组名称);

$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子句,所以没有解决方案。请帮助,提前感谢。

5lhxktic

5lhxktic1#

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

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}";
8zzbczxx

8zzbczxx2#

/* 数组数据 */

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

/* 用分隔符(空格)将数组元素联接成字符串““*/

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

/* 将分隔符(空格)““替换为“%”或“%”*/

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

“%$字符串%”
“;

6pp0gazn

6pp0gazn3#

它不会工作,因为它会尝试将数据库值(例如)“gum.cn”与“%gum.cn,lol.com,..... %”匹配,但这永远不会为真。
不如这样做:

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

希望能有所帮助。

ttp71kqs

ttp71kqs4#

使用IN子句,但要确保值用引号括起来并进行转义:

//TODO: escape $array_name values

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

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

mdfafbf15#

因为它生成无效的SQL(好吧,从技术上讲是有效的,它只是不会做你认为它会做的事情)

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

你可能需要追加多个LIKE语句,除非你要做一个精确的字符串匹配查询,否则内插不适用于这个任务,即使这样你也需要调整代码。

kmbjn2e3

kmbjn2e36#

/**内爆多维值数组,当与“[]”块不同时对字符进行分组。 @param array $array要内爆的数组 * @return string已内爆的数组 */ function hoArray 2SqlLike($array){ if(!is_array($array))return $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 );

}

mjqavswn

mjqavswn7#

我知道这个问题是老问题,但我希望这可能对其他人有用。
我们可以使用REGEXP而不是LIKE,例如:

$string = implode('|',$array_name);
$tank = "SELECT url FROM `PHP`.`db` WHERE url REGEXP '".$string."'";

相关问题