Bonsoir,
J'ai une variable qui contient: "1,23,136,58"
J'aimerai selectionner l'id 1,23,136,58 de la table "skills" et afficher leur nom automatiquement dans un foreach du genre:
$sql = $db->query("REQUETE...");
while($dada = $sql->fetch(PDO::FETCH_OBJ)) {
echo $data->name;
}
Mais je n'ai aucune idée de comment selectionner les éléments, j'ai essayé " WHERE id = '1,23,136,58' mais sa ne fonctionne pas.
Merci.
<?php
//prepare $db here
$var = '1,23,136,58';
$arr_var = explode(',', $var);
$request_build = 'SELECT * FROM skills WHERE ';
$request_values = [];
foreach ($arr_var as $key => $value) {
$request_build .= 'id = ? OR ';
$request_values[] = $value;
}
$request_build = substr($request_build, 0, -4);
$req = $db->prepare($request_build);
$req->execute($request_values);
$return = $req->fetchAll();
J'ai pas testé, désolé si sa ne marche pas.
Fonctionnement :
$db
) ;$var
contient l'input ;$arr_var
;SELECT * FROM skills WHERE id = ? OR id = ? OR id = ? OR id = ?
;prepare
, execute
et fetchAll
marche).Bonjour,
Première possibilité sans requête préparé
$var = "1,23,136,58";
$query = "SELECT * FROM skills WHERE ID IN (" . $var . ")";
$request = $db->query($string);
$request->setFetchMode(PDO::FETCH_OBJ);
$result = $request->fetchAll();
foreach($result as $value)
{
echo $value->nom;
}
Deuxième possibilité avec requête préparé et selon moi modulable
$var = "1,23,136,58";
//$vars devient un talbeau contenant [1, 23, 136, 58]
$vars = explode(",", $var);
//pour la chaine $var on remplace les numéros par "?"
$where_in = preg_replace("/[0-9]+/", "?", $vars);
/*
* Autre méthode qui peut servir dans un cas où par exemple les ID's sont directements dans un talbeau
* $where_in = implode(",", array_fill(0, count($vars), "?"));
* array_fill va créer un tableau de la même grandeur que $vars et il va remplir le tableau avec la valeur "?"
* implode va créer une chaine en rassemblent les éléments du résultat de la fonction array_fill
* résultat attendu : "?,?,?,?"
*/
$query = "SELECT * FROM skills WHERE ID IN (" . $where_in . ")";
$request = $db->prepare($query);
//parcourir $vars pour associer les valeurs aux paramètres
foreach($vars as $key => $value)
{
$key++; //pour éviter l'indice 0
$request->bindValue($key, $value, PDO::PARAM_INT);
}
//Exécute notre requête
$request->execute();
$request->setFetchMode(PDO::FETCH_OBJ);
//Retourne un talbeau contenant le résultat de notre requête
$result = $request->fetchAll();
foreach($result as $value)
{
echo $value->nom;
}