Sélection élément SQL

Par MehdiWEB, il y a 11 ans


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.

3 réponses

tleb, il y a 11 ans
<?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 :

  • Il faut commencer par avoir une instance de PDO ($db) ;
  • $var contient l'input ;
  • On transforme la string en array dans $arr_var ;
  • On construit la requête, ce qui nous donnera quelque chose comme : SELECT * FROM skills WHERE id = ? OR id = ? OR id = ? OR id = ? ;
  • On l'exécute (il se peut que cette partie ne marche pas, j'oublie toujours comment prepare, execute et fetchAll marche).
skp, il y a 11 ans

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; }
MehdiWEB, il y a 11 ans

Merci à vous !