Foros del Web » Programando para Internet » PHP »

PDO $query.= + WHERE IN

Estas en el tema de PDO $query.= + WHERE IN en el foro de PHP en Foros del Web. Hola a todos, Buenas, Llevo 2 días luchando con SELECT WHERE IN en pdo.... Quiero que mysql devuelva los resultados correspondientes a los valores seleccionados ...
  #1 (permalink)  
Antiguo 11/02/2015, 05:43
 
Fecha de Ingreso: febrero-2015
Ubicación: Costa Azul / Francia
Mensajes: 5
Antigüedad: 9 años, 2 meses
Puntos: 0
PDO $query.= + WHERE IN

Hola a todos, Buenas,

Llevo 2 días luchando con SELECT WHERE IN en pdo....
Quiero que mysql devuelva los resultados correspondientes a los valores seleccionados en mi multiselect
Código HTML:
 <select multiple="multiple" name="secteur_searched[]" >
      <option value="1">Accueil - Secrétariat - Fonctions Administratives</option>
      <option value="2">Achats - Juridique - Qualité; - RH - Direction</option>
     etc...
    </select> 
y/o en mis checkboxes
Código HTML:
<input type="checkbox" name="type_de_contrat[]" value="CDI" >      
 <input type="checkbox" name="type_de_contrat[]" value="CDD" > 
He visto que un array dentro de WHERE IN en pdo tiene que escribirse myArray =('1','2','3','4'), pero ¿cómo conseguir esta sintaxis desde un multiselect[] ? o unas checkboxes[] ? ¿ Y que poner en $param[]...?

Muchísimas gracias por anticipado,


Código:
try{
$query =  "SELECT * FROM marinterim_job_offers j 
          JOIN marimmo_villes v ON v.ville_id =j.job_ville  "; 
 $where = array();
 $param = array();
 
  if (!empty($_REQUEST['job_searched']))
     {	$where[] = "j.job_intitule=:job_intitule ";
        $param[':job_intitule'] = $_REQUEST['job_searched'];
     }
 
 if (!empty($_REQUEST['job_keyword']))
    { $where[] =  " j.job_descriptif LIKE CONCAT('%', :job_descriptif, '%') " ;
      $param[':job_descriptif'] = $_REQUEST['job_keyword'];
    }
	
 $secteur_searched="";
 if (!empty($_REQUEST['secteur_searched']) AND is_array($_REQUEST['secteur_searched']))
    { foreach ($_REQUEST["secteur_searched"] as $selectedOption)
      $secteur_searched.=$selectedOption.",";  
	}
 if ($secteur_searched)
     { $secteur_searched = rtrim($secteur_searched, ',');
	  $where[] = "j.job_secteur IN (:job_secteur) " ;
	  $param[':job_secteur']= $secteur_searched; // var_dump($secteur_searched);
	 }
	 
 $type_de_contrat="";   	 
 if(!empty($_REQUEST['type_de_contrat']) AND count($_REQUEST['type_de_contrat']) > 0 )
   {foreach ($_REQUEST["type_de_contrat"] as $selectedCheckbox)
     $type_de_contrat.=$selectedCheckbox.",";  
	}
 if ($type_de_contrat)
     { $type_de_contrat = rtrim($type_de_contrat, ',');
    $where[]=  "j.job_contrat IN (:job_contrat) " ;
	$param[':job_contrat']= $type_de_contrat; //var_dump($type_de_contrat);
   }     
   
if (!empty($where)) 
   { 
	 $query.= ' WHERE ' . implode(' AND ', $where); // WHERE crite1 AND critere2 AND critere 3, 
   }

 $query.= " ORDER BY j.job_date_insertion DESC"; 
 // echo $query;

$sth =$marInterim ->prepare($query); 
$sth->execute($param);
//print_r($sth->errorInfo());

$compte = $sth->fetchAll();
$nb_resultats = count($compte); 
$errors['nb_resultats_recherche'] = $nb_resultats; // ok 

/********************/
   if ( !empty($_REQUEST['afficher_x_resultats']))
	  { $per_page=$_REQUEST['afficher_x_resultats']; 
	  }
 else {$per_page=10; }


/* Results per page */
$nb_pages = ceil($nb_resultats/$per_page);  
$current_page = isset($_REQUEST['page']) && ($_REQUEST['page'] > 0) && ($_REQUEST['page'] <= $nb_pages) ? $_REQUEST['page'] : 1;
$start = ($current_page-1)*$per_page; //  $param[':start']= $start;

$query2= $query." LIMIT $start,$per_page ";
// echo '<br /> $query2 =  '.$query2;

$sth2 =$marInterim ->prepare($query2);  
$sth2-> execute($param); 
/* print_r($sth2->errorInfo());
  $sth2->debugDumpParams();
*/
function parms($query2,$param) {
    $indexed=$param==array_values($param);
    foreach($param as $k=>$v) {
        if(is_string($v)) $v="'$v'";
        if($indexed) $query2=preg_replace('/\?/',$v,$query2,1);
        else $query2=str_replace("$k",$v,$query2);
    }
    return $query2;
}
print parms($query2,$param); 

 while($datos= $sth2->fetch(PDO::FETCH_ASSOC))
      { $en_date_insertion=$datos['job_date_insertion'];	  
		 $explode_insertion= explode("-", $en_date_insertion);
		 $date_insertion_fr = $explode_insertion[2]."-".$explode_insertion[1]."-".$explode_insertion[0];		 
		 $job_id= $datos['job_id'];
		 $job_intitule= strtoupper($datos['job_intitule']);
		 $job_ville = $datos['ville_nom'];
		 $job_cp = $datos['cp'];
		 
					 
		echo "
					 <div class='offers btns'>
					 <a class='link_vers_offre' href='job_offer_detail.php?job_id=$job_id'>
					 <table id='table_liste_des_offres'>
					 <tr>
					 <td class='liste_intitule'> " .$job_intitule." </td>
					 <td class='liste_ref'>Offre n°" .$job_id."   du   ".$date_insertion_fr ." </td>
					 <td class='liste_ville'> ".$job_cp. " ".$job_ville." </td>
					 </tr>
					 </table>
					 </a>
					 </div>
				   ";
							
	  }
	  
	
 
} catch(Exception $e)
			  {	exit('<b>Catched exception at line '. $e->getLine() .' :</b> '. $e->getMessage());
			  }
  #2 (permalink)  
Antiguo 11/02/2015, 06:43
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: PDO $query.= + WHERE IN

Algo que te podría funcionar:

Código PHP:
 if(!empty($_REQUEST['type_de_contrat']) AND count($_REQUEST['type_de_contrat']) > ) {
    
$where[] = "j.job_contrat IN (:job_contrat)";
    
$param[":job_contrat"] = "'".implode("','"$_REQUEST['type_de_contrat'])."'";

No he podido probarlo, pero la idea está clara...

Es convertir ese array que te viene, en una cadena ;)
Saludos!
__________________
>> Eleazan's Source
>> @Eleazan
  #3 (permalink)  
Antiguo 11/02/2015, 06:52
 
Fecha de Ingreso: febrero-2015
Ubicación: Costa Azul / Francia
Mensajes: 5
Antigüedad: 9 años, 2 meses
Puntos: 0
[SOLUCIONADO] - PDO $query.= + WHERE IN

Hola Eleazan,

Gracias por la toma de interés.

Pero que tonta soy... Tienes toda la razón... Intenté tantas funciones y array_merge etc... que me olvidé de hacer sensillo...


Muchísimas gracias por tu ayuda ! Me has devuelto la sonrisa :)

Hasta otra, Buen día
  #4 (permalink)  
Antiguo 11/02/2015, 07:35
 
Fecha de Ingreso: febrero-2015
Ubicación: Costa Azul / Francia
Mensajes: 5
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: PDO $query.= + WHERE IN

Hola otra vez,

He soñado que el
Código:
"'".implode("','", $_REQUEST['type_de_contrat'])."'";
funcionaba, pero fue una halucinación....

PDO - WHERE IN accepta sólo un valor a la vez... No sé como apañarme.
Tendrías otra idea,
Gracies

Etiquetas: mysql, pdo, query, select
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:07.