IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Mysql et framework "php activerecord"


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2009
    Messages : 23
    Par défaut Mysql et framework "php activerecord"
    Bonjour,

    normalement ce message aurait plus sa place dans la partie framework, mais je n'ai pas trouvé de catégorie pour poser ma question.

    Peut-être pouvez vous quand même me répondre. J'utilise le framework PHP ActiveRecord, j'ai créé mes classes, relations etc.
    Mon soucis c'est au moment où je fais une requête SQL.
    Si j'écris ma requête en dur comme ça ("Article" est le nom de ma table et "nom_article" celui de mon attribut) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach(Article::find('all',array('conditions'=>"nom_article LIKE 'Les fiancés de la nuit' ")) as $art){
     
                echo $art->resume;
    }
    ça fonctionne.


    Par contre, si je fais la même requête, mais en passant par une variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach(Article::find('all',array('conditions'=>"nom_article LIKE '".$nom_art."' ")) as $art){
     
                echo $art->resume;
    }
    Ca ne fonctionne plus! Je me suis rendu compte que le problème venait des lettres accentuées. J'ai donc essayé l'encodage en utf8, modifier mon framework pour l'encodage, mais rien y fait.

    Je re-précise que c'est la variable php qui fait tout planter, le texte en dur avec des accents ne pose pas de problème.

    Si quelqu'un a une idée...

    Merci.

  2. #2
    Membre éclairé
    Inscrit en
    Octobre 2011
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 50
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "nom_article LIKE '$nom_art' "
    Pour les charsets:
    - vérifie que tu encodes et que ce qu'il y'a déjà écrit est en utf8 sans bom dans tes scripts.
    - vérifie que toutes les options charsets de mysql sont en utf8 et que toutes les caractères encodés dedans le sont aussi
    - pendant qu'on y est, vérifie que le header de toutes tes pages indiquent au navigateur qu'il est en utf8
    - ajoute ceci après ta connection à mysql pour indiquer que le language utilisé lors des communications avec mysql est l'utf8:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_set_charset ('UTF8');
    Normalement avec un cms, il devrait pas y avoir de problème au niveau des charsets.
    Peut être que les données que tu as inscrit dans tes tables ne sont pas en utf8.
    Si ce sont les accents qui posent problème tu pourrais peut être essayer de jouer avec UTF8_ENCODE/UTF8_DECODE avant l'insertion dans la table si tu pioches tes données de l'extérieur.
    Au préalable, essaye d'abord lors de la requête pour t'assurer que c'est bien le charset le problème.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2009
    Messages : 23
    Par défaut
    Merci KstorTroy pour ton attention.

    Pour les charsets:
    - vérifie que tu encodes et que ce qu'il y'a déjà écrit est en utf8 sans bom dans tes scripts.
    - vérifie que toutes les options charsets de mysql sont en utf8 et que toutes les caractères encodés dedans le sont aussi
    - pendant qu'on y est, vérifie que le header de toutes tes pages indiquent au navigateur qu'il est en utf8
    J'ai vérifié ce que tu m'a dis. Mais sans succès.



    Peut être que les données que tu as inscrit dans tes tables ne sont pas en utf8.
    Si ce sont les accents qui posent problème tu pourrais peut être essayer de jouer avec UTF8_ENCODE/UTF8_DECODE avant l'insertion dans la table si tu pioches tes données de l'extérieur.
    Au préalable, essaye d'abord lors de la requête pour t'assurer que c'est bien le charset le problème.
    Les données dans mes tables sont bien en utf8.
    Les fonctions d'encodage ne changent malheureusement rien.
    Ma requête est bonne, car elle fonctionne quand je l'utilise sans stocker dans une variable la valeur de mon attribut.

    Je continue donc de chercher.

  4. #4
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Je re-précise que c'est la variable php qui fait tout planter, le texte en dur avec des accents ne pose pas de problème.
    Peut être parce que tu échappe la donnée qui contenant une quote.
    Du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array('conditions'=>"nom_article LIKE 'A vol d\'oiseau' ")
    Si on enlève l’antislash (d'oiseau) c'est quasi certain de provoquer une erreur.

    Je ne connais pas ce FW, mais théoriquement il devrait avoir une méthode pour quotter une donnée.
    Ou alors de faire cette requête autrement, comme les requêtes préparées de PDO (si tu connais).


    As tu essayé de voir si tu obtiens cette erreur uniquement si le paramètre contient une ou plusieurs quotes par exemple ?
    (histoire de mieux cerner le problème)

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Par défaut
    tu peu essayer comme ca ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach(Article::find('all',array('conditions'=>"nom_article LIKE '$nom_art' ")) as $art){
     
                echo $art->resume;
    }

Discussions similaires

  1. pb avec quote...php + mysql
    Par nicdes dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 10/12/2005, 01h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo