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 :

MYSQLI et résultat de requête "SET .." [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre actif Avatar de tribaleur
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 401
    Points : 237
    Points
    237
    Par défaut MYSQLI et résultat de requête "SET .."
    Bonjour.

    Je travail sur une application qui doit traiter des données multilingues. Du coup après ma connexion à une BDD, je paramètre l'encodage, des futures échanges avec la BDD, en UTF8.
    Pour cela j'utilise la requêtes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8';
    Cette requête retourne un résultat vide même quand elle s’exécute correctement. Je n'arrive donc pas, en PHP, à savoir si la requête s'est bien exécutée ou si une erreur s'est produite.

    J'ai essayé plusieurs possibilité :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $db = new mysqli('localhost', '', '', 'maBDD');
    if(!$db->connect_errno){
    	$res = $db->query("SET character_set_results = 'utf8' ... "); // ma requête
    	if($res===false){echo 'failed setDBEncodage';} //la condition est toujours validé
    	if(!$res){echo 'failed setDBEncodage';} //la condition est toujours validé
    }else{ $this->log_->addRow('failed DB connection');}
    L'exécution de la requête (même fausse) ne génère pas d'erreur dans la BDD ... je ne peux donc pas utiliser "$db->connect_errno" après l'exécution de la requête.

    Existe t-il une solution pour contourner ce problème?

    Merci d'avance.
    Rien n'est rien!!! ... Tout est quelque chose!!!

    Petits liens utiles :
    -Chaine de connexion : http://www.connectionstrings.com/
    -ADO et ADO.net : Tuto ADO et ADO.net

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Quelle requête "fausse" ne génère pas d'erreur ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre actif Avatar de tribaleur
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 401
    Points : 237
    Points
    237
    Par défaut
    Par exemple si je fausse la requête et que je fais comme si dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $db = new SQL_CSVInterface('localhost', '', '', 'Mabase');
    if(!$db->connect_errno){
    	$res = $db->query("SE character_set_results = 'utf8'"); //J'ai supprimer le T de SET
    	echo 'connect_errno : '.$db->connect_errno; // affiche toujours : "connect_errno : 0"
    	if(!$res){ echo 'failed setDBEncodage';}
    }else{ echo 'failed DB connection';}
    Dans le SGBDR, la requête génère bien une erreur. Mais par le biais de MySqlI->query(), l'erreur ne remonte pas. Je n'arrive donc pas à faire la différence entre l'exécution normale qui ne retourne aucune résultat. Et l'exécution qui génère une erreur ... et qui du coup ne retourne pas de résultat non plus.
    Rien n'est rien!!! ... Tout est quelque chose!!!

    Petits liens utiles :
    -Chaine de connexion : http://www.connectionstrings.com/
    -ADO et ADO.net : Tuto ADO et ADO.net

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ton premier code fonctionne.

    Ton deuxième code est sensiblement différent, est-ce qu'il n'est pas plus proche du code réel dont tu nous parles ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre actif Avatar de tribaleur
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 401
    Points : 237
    Points
    237
    Par défaut
    Je ne comprend pas ta question

    Pour être sûr de bien se comprendre je reformule mon problème :
    L'exécution de la requête "MySqlI->query("SET character_set_results = 'utf8'")" fonctionne mais renvoie toujours un résultat vide.
    => Comment faire pour savoir si il y a eu une erreur lors de l'exécution de la requête?
    Rien n'est rien!!! ... Tout est quelque chose!!!

    Petits liens utiles :
    -Chaine de connexion : http://www.connectionstrings.com/
    -ADO et ADO.net : Tuto ADO et ADO.net

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Comme je t'ai dit, ton premier code fonctionne : quand la requête provoque une erreur, la méthode query() retourne bien FALSE.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre actif Avatar de tribaleur
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 401
    Points : 237
    Points
    237
    Par défaut
    Bon alors je devais avoir une faute de saisie dans ma requête car en effet, la comparaison à FALSE ne fonctionne que dans le cas d'une erreur.

    Mais lors de mon premier test avec cette méthode, j'avais une erreur qui remontait tout le temps. (d'où mon message sur ce forum)
    Et bien merci à toi!

    Donc pour récapituler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $db = new mysqli('localhost', '', '', 'maBDD');
    if(!$db->connect_errno){
    	$res = $db->query("SET character_set_results = 'utf8' ... "); // ma requête
    	if($res===false){echo 'failed setDBEncodage';} //la condition est VRAI uniquement dans le cas d'une erreur
    	if(!$res){echo 'failed setDBEncodage';} //la condition est VRAI uniquement dans le cas d'une erreur
    }else{ $this->log_->addRow('failed DB connection');}
    Rien n'est rien!!! ... Tout est quelque chose!!!

    Petits liens utiles :
    -Chaine de connexion : http://www.connectionstrings.com/
    -ADO et ADO.net : Tuto ADO et ADO.net

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Insérer résultat d'une requête : problème de quote
    Par maxime17s dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 05/12/2008, 03h42
  2. Pb Set quoted Identifier
    Par Yanmeunier dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 05/12/2005, 10h49
  3. Manipulations binaires : savoir si un bit est "set"
    Par DiGiTAL_MiDWAY dans le forum Général Python
    Réponses: 2
    Dernier message: 18/09/2005, 16h42

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