Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1335 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Passer les guillemets dans un SELECT Potgresql #%@* WTF !!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Passer les guillemets dans un SELECT Potgresql #%@* WTF !!

n°2350403
erwan83
Du Shift DEL tu te méfieras !
Posté le 01-04-2020 à 14:23:05  profilanswer
 

Bonjour me revoila.
Donc, je recherche du texte contenant une apostrophe.  
J'ai pris le terme "l'histoire" sachant qu'il est présent dans la BDD

Code :
  1. //marche pas $REQDB2= str_replace("'","'",$REQ);
  2. //marche pas $REQDB2= str_replace("'","\'",$REQ);
  3. $REQDB2= str_replace("'","''",$REQ);
  4. //$REQDB2= str_replace("'","'",$REQ);
  5. //$REQDB2= str_replace("'","'",$REQ);
  6. //$REQDB2= str_replace("'","'",$REQ);
Code :
  1. $REQ="l'histoire";
  2. $REQDB2= str_replace("'","''",$REQ); // les remplacements que je fais un à un (voir code au dessus)
  3. $ligne = "SELECT REQUETE,DATE FROM _REQUETES_ WHERE REQUETE LIKE '".$REQDB2."'";
  4. $requete_sql = pg_query($cursor, $ligne);
  5. if (!$requete_sql)
  6.  { print $requete_sql. "Une erreur s'est produite. ligne 42"; exit;
  7. }
  8. while ($row = pg_fetch_row($requete_sql))
  9. {
  10.  if ($row[0] == $REQDB2)
  11.   { $REQUETE_DEJA_ENREGISTREE='1';
  12.    $TUXB=$row[1];
  13.   }
  14. }
  15. if ($REQUETE_DEJA_ENREGISTREE=='0')
  16. {
  17. // ETAPE 1 CREER LES TABLES REQUETES
  18. ...///...
  19. // ETAPE 2 ON RECHERCHE LES LIGNES


Là je fais un INCLUDE qui se trouve ci-dessous

Code :
  1. $ligneA = "SELECT ARTICLE, TITLE, TEXT, RACINE FROM TEST2 WHERE TEXT ILIKE $1 OR TITLE ILIKE $1 OR TEXT ILIKE $2 OR TITLE ILIKE $2 OR TEXT ILIKE $3 OR TITLE ILIKE $3 OR
  2. TEXT ILIKE $4 OR TITLE ILIKE $4 OR  TEXT ILIKE $5 OR TITLE ILIKE $5";
  3. $Recherche_Ilike = pg_query_params($cursor, $ligneA, array('% '.$REQDB2.' %','% '.$REQDB2.'.%','%'.$REQDB2.',%','%.'.$REQDB2.' %','%'.$REQDB2.' %'));
  4. if (!$Recherche_Ilike)
  5.  { print "Une erreur s'est produite. ";exit; }
  6. // je sais je devrais la passer en query_params ci dessous mais la ca change pas grand chose donc je le ferai plus tard.
  7. $ligneC = "SELECT COUNT (URL) FROM TEST2 WHERE TEXT ILIKE '".$REQDB2."'";
  8. $requete_sql = pg_query($cursor, $ligneC);
  9.    while ($row = pg_fetch_row($requete_sql))
  10.    {
  11.    print $row[0];
  12.    }


ALORS LE PROBLEME:
Dans mon include ci-dessus, la recherche s'effectue puisque je vois bien qu'il mouline ==> str_replace(" ' "," ' ' ",$REQ)
Donc je me dis que la requete est comprise par POSTGRESQL (dans le cas contraire il me plante direct)
Or il ne trouve rien...... il me retourne un nombre de lignes = 0....


---------------
http://www.ypikay.com
mood
Publicité
Posté le 01-04-2020 à 14:23:05  profilanswer
 

n°2350404
Devil'sTig​er
Posté le 01-04-2020 à 14:54:02  profilanswer
 

Typiquement un cas ou tu veux utiliser PDO et ne surtout pas passer les parametres tels quels.
 
https://www.postgresqltutorial.com/ [...] php/query/
 
Cherche "bindValue" dans cette page pour voir un exemple.
 
En utilisant bindValue: plus besoin de faire gaffe aux apostrophes & co, le systeme s'en occupe pour toi et garanti que les injections SQL ne soient pas possible (uniquement bien sur si tu utilises tout le temps bindValues)
 
EDIT: si tu ne peux pas changer pour PDO (qui est ce qui est recommandé aujourd'hui), l'alternative "old school" c'est celle la:
https://www.php.net/manual/fr/funct [...] params.php
 
Et pas pg_query qui ne devrait jamais prendre de parametre comme ca...


Message édité par Devil'sTiger le 01-04-2020 à 14:55:22
n°2350423
erwan83
Du Shift DEL tu te méfieras !
Posté le 01-04-2020 à 17:34:05  profilanswer
 

Merci beaucoup.
Mais j'utilise query params.  
Je vais voir ton histoire de binValue.  
Merci


---------------
http://www.ypikay.com
n°2350444
erwan83
Du Shift DEL tu te méfieras !
Posté le 01-04-2020 à 18:56:45  profilanswer
 

Bon je reviens à la charge. Je ne sais toujours pas quel chr il faut lui passer à PostGresql....
tous les exemples ci dessous plantent.
Merci de votre aide.
 

Code :
  1. $array = array("l''histoire","l\'histoire","l\\'histoire","l\'\'histoire","l\''histoire","l\''histoire","l'histoire" );
  2. foreach ($array as &$REQ)
  3. {
  4. print "<br>".$REQ."<br>";
  5. $ligne = "SELECT URL, TITLE, TEXT, RACINE FROM TEST2 WHERE
  6. TITLE ~* ' ".$REQ." ' OR
  7. TEXT  ~* '".$REQ." '
  8. ";
  9. print $ligne;
  10.  $requete_sql = pg_query($cursor, $ligne);
  11.  //$requete_sql = pg_query_params($cursor, $ligne, array($REQ));
  12. print $ligne.'<br>';
  13.  if (!$requete_sql)
  14.   { print 'exit0'; }



---------------
http://www.ypikay.com

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Passer les guillemets dans un SELECT Potgresql #%@* WTF !!

 

Sujets relatifs
MYSQL : update et select en une seule requête[POSTGRESQL] WTF création unique impossibe
[Javascript] Désélectionner un choix d'un selectrecupere les mot du select et textarea
Création d'un "select" personnaliséComment passer une variable dans une fonction ??
Passer au tour suivant boucle for each et probleme if[Résolu PHP]aide pour passer de preg_replace à preg_replace_callback
[MySQL] Combiner un select classique et un count()promenade dans un const * char (débutant)
Plus de sujets relatifs à : Passer les guillemets dans un SELECT Potgresql #%@* WTF !!


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR