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 :

Créer plusieurs tables SQLite dans une seule requête. [PDO]


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
    Webmaster
    Inscrit en
    Février 2017
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Février 2017
    Messages : 43
    Par défaut Créer plusieurs tables SQLite dans une seule requête.
    Bonjour à tous! Je rencontre un problème assez incompréhensible. Après avoir généré mon sql de création des tables de ma base de données (exécuté avec succès avec DB Browser), l'exécution de ce dernier avec l'objet PDO ne prend en compte que la première table et ignore tout le reste, je croyais que les commentaires poseraient problème, mais même sans, il n'y a que la première occurence de CREATE TABLE qui est pris en compte. Alors D'où peut venir le problème ?

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 599
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Merci de communiquer le script qui pose souci

  3. #3
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    Après avoir généré mon sql de création des tables de ma base de données (exécuté avec succès avec DB Browser), l'exécution de ce dernier avec l'objet PDO ne prend en compte que la première table et ignore tout le reste
    PDO exécute 1 seule requête à la fois.

    Pour l'initialisation de ta base il faut faire autant de requêtes PDO que de tables à créer, ou passer par phpMyAdmin, Workbench, le client mysql en ligne de commandes :

    $ mysql -uUtilisateur -pMotDePasse TaBDD < tables-init.sql

    ... ou autre client

  4. #4
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2017
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Février 2017
    Messages : 43
    Par défaut
    Le petit hic c'est que j'utilise SQLite et non MySQL et d'ailleurs j'ai vu une fonction du driver MySQL (mysqli->mysql_multi_query() ) qui permet de faire ça mais encore là je n'utilise pas MySQL et moins encore un driver spécifique mais plutôt PDO, surtout que pour mon besoin il faut impérativement automatiser tout ça pour autant "d'inscriptions". J'avais envisagé de faire un truc compliqué avec une lecture spécifique et des conditions le tout dans une boucle, mais trop compliqué d'où ma recherche de quelque chose d'existant et simple.

  5. #5
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par Lauper Voir le message
    Le petit hic c'est que j'utilise SQLite et non MySQL
    Oups oui pardon. Je ne connais pas SQLite, mais je n'ai pas l'impression qu'on puisse non plus faire du multi-query.

    Essaie de lire ton fichier de commandes SQL create-tables.sql en ligne de commande :

    $ sqlite db-file.sqlite < create-tables.sql

    Sinon si tu veux faire ça en PHP pur alors il faudra faire 1 PDO::exec() par CREATE TABLE.

  6. #6
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2017
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Février 2017
    Messages : 43
    Par défaut
    J'ai trouvé la solution à mon problème et le moins que l'on puisse dire c'est que le problème ne venait pas de là où je pensais, je m'explique :

    J'avais mon createTable.sql en local et tout marchait, alors il fallait que je l'envoie sur mon serveur pour créer les tables.

    Je l'ai compressé en base64 en UTF-8 (pour le transférer) ce qui donne quelque chose du genre "77u/Q1JFQVRFIFRBQkxFI...", le problème c'est que mon système (éditeur) l'a encodé en "UTF-8 with BOM" d'où le "77u/" au début, ce qui est un caractère de contrôle (je crois) qui est invisible (surtout pour mon navigateur) d'autant plus que mon éditeur de code (vsCode) encode mes fichier php en UTF-8 whitout BOM (la cata).

    Donc, à ce niveau j'avais deux souci, lorsque je décodais mon fichier pour l'exécuter, j'avais false parce que PDO ne comprenait rien et quand je fais copier-coller du contenu de mon fichier il n'y avais qu'une table enregistré ou crée.

    Pour régler le problème dynamiquement, j'ai dans un premier temps fait : preg_replace("/\xEF\xBB\xBF/", "", $createTable); pour supprimer le code de contrôle et ensuite fait une PDO::exec() et tout a été créé sans rien faire d'autre.

    Pour ceux qui se demandent comment est-ce que j'ai découvert ce caractère invisible, en fait, j'avais affiché le contenu de mon fichier dans une balise "pre", puis j'ai copié-collé le résultat dans vsCode et il y avait un caractère bizarre au début.
    PS : il faut noter que qu'on j'affichait le contenu de mon fichier dans un simple "echo", le caractère était échappé.

    Merci pour la participation de tous !!!!!!!

  7. #7
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2017
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Février 2017
    Messages : 43
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Bonjour,

    Merci de communiquer le script qui pose souci
    Le script c'est 18 CREATE TABLE classique, tout ce qu'il y a de plus classique. En fait le problème ne vient pas du script puisse que ce dernier s'exécute sans problème dans le logiciel DB BROWSER (gestionnaire pour les base SQLite)

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/03/2014, 17h32
  2. Réponses: 7
    Dernier message: 12/06/2008, 13h26
  3. Créer plusieures tables à partir d'une seule
    Par CHINAILLON dans le forum VBA Access
    Réponses: 4
    Dernier message: 20/03/2008, 15h35
  4. Réponses: 5
    Dernier message: 21/06/2007, 08h49
  5. Lier trois tables dans une seule requête ?
    Par tempirate dans le forum Requêtes
    Réponses: 2
    Dernier message: 18/06/2006, 19h27

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