[RESOLU] Requête préparé avec ? ne récupère rien

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Requête préparé avec ? ne récupère rien

Re: Requête préparé avec ? ne récupère rien

par kevin254kl » 30 janv. 2019, 11:30

Merci,

Exact les caractères % étaient le problème.
Merci de votre aide.

Code : Tout sélectionner

/* get id from wordpress table, with array order ex : [1,2,month] * * @param string array $terms order element contain in date * @return int id */ public function getIdTermDateWp(array $terms) : int { try { $db = $this->db; $params = array($this->taxonomies['category']); // USE SLUG $sql = "SELECT te.term_id FROM pu_wp_term_taxonomy as ta INNER JOIN pu_wp_terms as te ON ta.term_taxonomy_id = te.term_id WHERE ta.taxonomy = ? && te.slug LIKE ?"; // init like request $keyword = '%'; foreach($terms as $term) $keyword .= $term . '%'; // send keyword to array parameter for sql array_push($params, $keyword); $stmt = $db->prepare($sql); $stmt->execute(array_values($params)); $row = $stmt->fetch(); return (!empty($row['term_id'])) ? $row['term_id'] : 0; } catch(PDOException $e) { echo 'getIdTerm term:' . $terms . ' error ' . $e->getMessage(); return 0; } }

Re: Requête préparé avec ? ne récupère rien

par @rthur » 30 janv. 2019, 10:49

Effectivement, il faut que tes caractères joker (% dans ton cas) soient dans la variable que tu transmets et non pas en dur dans la requête.

Dans la requête uniquement LIKE ? avec donc une seule variable.
Et c'est dans la construction de cette variable que tu concatènes ce que tu veux, autres variables et joker.

Re: Requête préparé avec ? ne récupère rien

par Spols » 30 janv. 2019, 10:17

J'essaierai en ne mettant qu'un ? dans ton like et en concaténant mes arguments dans la boucle avec un % en début et fin,

sinon en nommant les paramètres ?

Requête préparé avec ? ne récupère rien

par kevin254kl » 29 janv. 2019, 18:54

Bonjour à tous,

Pourriez vous m'aider?

J'ai une fonction qui permet de matcher dans ma base une date en la décomposant, avec différents paramètres ex '1 à 4 mois' '2 semaines' les paramètres aussi.

J'ai une fonction pour matcher avec un nombre de paramètre qui varie, qui va chercher en base de données, mais cela ne fonctionne pas

Code : Tout sélectionner

public function getIdTermDateWp(array $terms) : int { try { $db = $this->db; $params = array($this->taxonomies['category']); // USE SLUG $sql = "SELECT te.term_id FROM pu_wp_term_taxonomy as ta INNER JOIN pu_wp_terms as te ON ta.term_taxonomy_id = te.term_id WHERE ta.taxonomy = ? && te.slug LIKE '%"; foreach($terms as $term) { $sql .= '?%'; array_push($params, $term); } $sql .= "'"; // close like parameters $stmt = $db->prepare($sql); $stmt->execute(array_values($params)); $row = $stmt->fetch(); echo '<pre style="background-color:black;color:white;">';var_dump($sql, $params, $row);echo '</pre>';die; return (!empty($row['term_id'])) ? $row['term_id'] : 0; } catch(PDOException $e) { echo 'getIdTerm term:' . $terms . ' error ' . $e->getMessage(); return 0; } }
J'ai avec mon var_dump

Code : Tout sélectionner

string(175) "string(175) "SELECT te.term_id FROM pu_wp_term_taxonomy as ta INNER JOIN pu_wp_terms as te ON ta.term_taxonomy_id = te.term_id WHERE ta.taxonomy = ? && te.slug LIKE '%?%?%?%'" array(4) { [0]=> string(16) "listing_category" [1]=> string(1) "1" [2]=> string(1) "4" [3]=> string(4) "mois" } bool(false)
Si je test dans phpmyadmin

Code : Tout sélectionner

SELECT te.term_id FROM pu_wp_term_taxonomy as ta INNER JOIN pu_wp_terms as te ON ta.term_taxonomy_id = te.term_id WHERE ta.taxonomy = 'listing_category' && te.slug LIKE '%1%4%mois%'
J'ai bien le bonne id retourné et pas d'erreur pdo.
Je pense que le problème vient des ?.

Auriez vous une piste?
Merci :)