Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.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 如何在查询中包含数组的值_Php_Sql_Arrays_Search - Fatal编程技术网

Php 如何在查询中包含数组的值

Php 如何在查询中包含数组的值,php,sql,arrays,search,Php,Sql,Arrays,Search,我有以下数组: $rqt="SELECT * FROM `client_gestion_compte` WHERE `id_company`='".$societe['id']."' AND `id_gestionnaire_client`='".$_SESSION['id']."'" ; $res=mysql_query($rqt); $values = array(); while($donnees=mysql_fetch_assoc($res)) { $values[

我有以下数组:

 $rqt="SELECT * FROM `client_gestion_compte` WHERE `id_company`='".$societe['id']."' AND `id_gestionnaire_client`='".$_SESSION['id']."'" ;
 $res=mysql_query($rqt);

 $values = array();
 while($donnees=mysql_fetch_assoc($res))
 {
     $values[] = $donnees['compte'] ;
 }
我想使用这个数组的值在数据库中进行搜索查询。我必须使用数组的所有值,但问题是我不知道数组中有多少项,所以我无法手动执行此操作,例如$value等条件

所以我试过这样做

`$sql="SELECT * FROM `debiteur` INNER JOIN `creance` ON `creance`.`n_doss` = `debiteur`.`n_doss` WHERE `creance`.`id_company`=".$societe['id']." AND `debiteur`.`nom` LIKE '%".$_GET['s']."%' AND `creance`.`code_client` LIKE '%".$values."%' OR `creance`.`id_company`=".$societe['id']." AND `debiteur`.`prenom` LIKE '%".$_GET['s']."%' OR `creance`.`id_company`=".$societe['id']." AND `debiteur`.`raison_sociale` LIKE '%".$_GET['s']."%' OR `creance`.`id_company`=".$societe['id']." AND `debiteur`.`siret` LIKE '%".$_GET['s']."%' OR `creance`.`id_company`=".$societe['id']." AND `debiteur`.`adresse` LIKE '%".$_GET['s']."%' OR `creance`.`id_company`=".$societe['id']." AND `debiteur`.`adresse2` LIKE '%".$_GET['s']."%' Or `debiteur`.`ville` LIKE '%".$_GET['s']."%' OR `creance`.`id_company`=".$societe['id']." AND `debiteur`.`code_postal` LIKE '%".$_GET['s']."%' OR `creance`.`id_company`=".$societe['id']." AND `debiteur`.`tel` LIKE '%".$_GET['s']."%' OR `creance`.`id_company`=".$societe['id']." AND `debiteur`.`tel2` LIKE '%".$_GET['s']."%' Or `debiteur`.`fax` LIKE '%".$_GET['s']."%' OR `creance`.`id_company`=".$societe['id']." AND `debiteur`.`fax2` LIKE '%".$_GET['s']."%' Or `debiteur`.`gsm` LIKE '%".$_GET['s']."%' OR `creance`.`id_company`=".$societe['id']." AND `debiteur`.`gsm2` LIKE '%".$_GET['s']."%' OR `creance`.`id_company`=".$societe['id']." AND `debiteur`.`e_mail` LIKE '%".$_GET['s']."%' GROUP BY `creance`.`n_doss`  ";
问题出在这一行
creance.code\u类似“%”“$values.”%'


因为我永远不知道如何搜索数组的所有自定义值,而不仅仅是像值[1]这样的一个值。

您需要使用
foreach
循环或
内爆来遍历数组的所有元素

$sql="SELECT * FROM `debiteur` INNER JOIN `creance` ON `creance`.`n_doss` = `debiteur`.`n_doss` WHERE `creance`.`id_company`=".$societe['id']." AND `debiteur`.`nom` LIKE '%".$_GET['s']."%' AND ";
 foreach($values as $v)  {
  $sql .= `creance`.`code_client` LIKE '%".$v."%' OR " ;
 }

 $sql .= " `creance`.`id_company`=".$societe['id']." AND `debiteur`.`prenom` LIKE '%".$_GET['s']."%' OR `creance`.`id_company`=".$societe['id']." AND `debiteur`.`.....";

在这里插入针对
mysql\u*
函数的随机rant-永远切换到@moonwave99或mysqli\ux,当有两个选项时,为什么只提到PDO?我理解,但是查询呢?当我进行mysql_查询($sql)时,它会加载三次还是只获取第一个或最后一个结果?它将使用数组中的所有值
$values
,并将其与
连接起来。因此,您将得到整个结果集。顺便说一下,使用
内爆
(Gustonez回答)是一个更好的解决方案,因为它避免了循环。
$rqt="SELECT * FROM `client_gestion_compte` WHERE `id_company`='".$societe['id']."' AND `id_gestionnaire_client`='".$_SESSION['id']."'" ;
 $res=mysql_query($rqt);

 $values = array();
 while($donnees=mysql_fetch_assoc($res))
 {
     $values[] = $donnees['compte'] ;
 }

 $value_query=implode(",",$values);

 //Place it like this in your query

 creance.code_client IN ('".$value_query."')
$sql = "SELECT * FROM `debiteur` 
INNER JOIN `creance` ON `creance`.`n_doss` = `debiteur`.`n_doss` 
WHERE {...}
AND (`creance`.`code_client` LIKE '%" . implode("%' OR `creance`.`code_client` LIKE '%", $values) . "%')
{...}";