like dans une requete préparée

Par gilles40, il y a 8 ans


Base de données MySQL

Bonjour,

Je me tourne vers vous car je n'arrive pas a solutionner mon probleme.

Ce que je fais

Décrivez ici votre code ou ce que vous cherchez à faire

if(isset($_GET['valeur'])){ $conditions = ($_GET['type_recherche']); $valeur = $db->quote($_GET['valeur']); $sql = "SELECT * FROM invoices WHERE "; if ($conditions == 'num_contrat') $sql .= " num_contrat "; elseif ($conditions == 'num_sequentiel') $sql .= " num_sequentiel"; elseif ($conditions == 'element_facture_mt_facture_ttc') $sql .= " element_facture_mt_facture_ttc "; else $sql .= " client_nom "; $sql .= " = $valeur"; $sth = $db->prepare($sql); $sth->execute(); $search = $sth->fetchAll(); }

Ce que je veux

Je voudrais pouvoir mettre un LIKE dans la condition num_contrat, en effet je peux avoir un numero sur 9 chiffres, mais derriere ces 9 chiffres je peux avoir d'autres caractères.
je souhaiterai que ma requete quand je la fait sur le numero de contrat ressemble à ceci:
SELECT * FROM invoices WHERE num_contrat LIKE '378774992%'
mais je n'arrive pas à savoir ou je doit placer le LIKE et ou je dois placer le %... j'ai essayer tout un tas de choses mais aucune ne fonctionne.

merci par avance de votre aide.

Gilles

4 réponses

Pierrot01, il y a 8 ans
$sql = "SELECT * FROM ta_table WHERE ton_champ like :une_valeur"; $prep = $connection->prepare($sql); $val="378774992"; $res = $prep->execute(array("ton_champ"=>$val.'%')); $search = $res->fetchAll(); var_dump($search);

fait à l'arrache, mais ça devrait être ça :D
@plus

gilles40, il y a 8 ans

*
j'ai essayer de faire fonctionner mais j ai ce message d'erreur:

Fatal error: Uncaught Error: Call to a member function fetch() on boolean in /var/http/www/portail/agence/customers/invoice.php:33 Stack trace: #0 {main} thrown in /var/http/www/portail/agence/customers/invoice.php on line 33

j'ai verifié le nom du champ, le nom de la table mais pas d'erreurr de ce coté là.

$sql = "SELECT * FROM invoices WHERE id=:id"; $prep = $db->prepare($sql); $val=2; $res =$prep->execute(array("id"=>2)); $search = $res->fetchAll(); var_dump($search); die();
Carouge10, il y a 8 ans

Attention à ne pas coller les éléments contre le = car cela peut poser problème

$sql = "SELECT * FROM invoices WHERE id = :id";
gilles40, il y a 8 ans

Bonjour,

j ai résolu mon problème de cette maniere:

$sql = "SELECT * FROM invoices WHERE "; if ($conditions == 'num_contrat') $sql .= " num_contrat "; elseif ($conditions == 'num_sequentiel') $sql .= " num_sequentiel "; elseif ($conditions == 'element_facture_mt_facture_ttc') $sql .= " element_facture_mt_facture_ttc "; else $sql .= " client_nom "; $sql .= " LIKE = :valeur ORDER BY num_sequentiel DESC "; $sth = $db->prepare($sql); $sth->execute(array(':valeur' => $valeur.'%')); $search = $sth->fetchAll();

@pierrot01 de m'avoir mis sur la voie.

@Carouge10 merci du conseil.

Bonne journée