Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Where子句中的数组_Php_Mysql_Arrays_Where - Fatal编程技术网

Php Where子句中的数组

Php Where子句中的数组,php,mysql,arrays,where,Php,Mysql,Arrays,Where,如何将数组插入where子句?这是获取ID的第一个查询: $query = "SELECT id FROM #_categories WHERE alias = 'agenda'"; $result = mysql_query($query) or die(mysql_error()); while($linha = mysql_fetch_array($result)){ $vNome = $linha['id']; } 现在执行第二个查询以获得最终结果: $query = "

如何将数组插入where子句?这是获取ID的第一个查询:

$query = "SELECT id FROM #_categories WHERE alias = 'agenda'";
$result = mysql_query($query) or die(mysql_error());
   while($linha = mysql_fetch_array($result)){
   $vNome = $linha['id']; 
}
现在执行第二个查询以获得最终结果:

$query = "SELECT introtext FROM $tabela WHERE catid IN ($vNome) <> ''";
结果是:

SELECT introtext FROM #_content WHERE catid IN (36) <> ''
为什么我不能把子句中的所有ID都放进去

PS:很抱歉英语不好,这不是我的母语。

将循环更改为此

$vNome = array();
$i = 0;
while($linha = mysql_fetch_array($result)){
   $vNome[$i] = $linha['id']; 
   $i++;
}
然后使用这个$vNome数组

$vNome=array();
$result = mysql_query($query) or die(mysql_error());
  while($linha = mysql_fetch_array($result)){
  $vNome[] = $linha['id']; 
}
然后sql:

$query = "SELECT introtext FROM $tabela WHERE catid IN (".implode(",",$vNome).")";
IN是一个SQL关键字。不能将原始PHP数组传递给SQL

必须首先将数据读入数组,然后展开数组:

$query = "SELECT id FROM #_categories WHERE alias = 'agenda'";
$result = mysql_query($query) or die(mysql_error());
$vNome = array();
while($linha = mysql_fetch_array($result)) {
    $vNome[] = $linha['id']; // don't forget the [] to put it into an array, else the value will be scalar!
}
$query = "SELECT introtext FROM $tabela WHERE catid IN (".implode(",", $vNome).")";

$vNome不是数组。在while子句中,您只是覆盖了变量。在while之前,初始化变量

$vNome = array();
然后在这段时间内,将其更改为

$vNome[] = $linha['id'];
现在,当涉及到第二个查询时,不能只传入数组,而必须对其进行内爆

$vNomeStr = implode (',',$vNome);

然后可以在查询中使用$vNomeStr。只要是数字,这就可以正常工作,否则您还必须将每个项都封装在引号中。

您是否尝试过这样的嵌套select语句:

SELECT introtext 
FROM $tabela 
WHERE catid 
IN (
    SELECT id 
    FROM #_categories 
    WHERE alias = 'agenda'
);

可能有更有效的方法,但这应该是可行的。

将数组内插为逗号分隔的字符串将使您有机会在中使用1,2,3字符串。。。操作员工作了!非常感谢你!