我需要使用数组列表进行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
子句的情况下进行查询,因此没有解决方法。请提前帮助,谢谢。
答案 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 );
}