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 :

PHP PDO CREATE TABLE IF NOT EXISTS


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juillet 2019
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2019
    Messages : 130
    Points : 73
    Points
    73
    Par défaut PHP PDO CREATE TABLE IF NOT EXISTS
    Bonjour
    j'essaie de créer une table MySql si elle n'existe pas et y insérer des données.
    J'ai essayé "CREATE TABLE IF NOT EXISTS $myTable".
    La table n'est pas créée (ce qui est bien) mais insert a fonctionné malgré tout et je me suis retrouvé avec la même table avec une ligne en plus (les donnée que j'avais voulu insérer si la table n'existait pas). La ligne précédente existe toujours mais son TimeStamp est mis à jour (les deux lignes ont le même TimeStamp, le plus récent)

    Ce que je souhaite faire est que la table ne subisse aucun changement si elle existe (que Insert ne fonctionne pas si la table existe). Et pourquoi recevoir un message "La table existe déjà"

    Merci

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 159
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 159
    Points : 8 338
    Points
    8 338
    Billets dans le blog
    17
    Par défaut
    Ce genre de considération laisse penser clairement à un mauvais modèle de données.

    Si tu décides de poursuivre dans cette (mauvaise) voie, alors pour avoir un résultat exploitable il faudra interroger la base système information_schema et sa table tables qui référence les différentes tables créées :

    $sql = <<<SQL
        select all exists (
            select all *
            from information_schema.tables
            where true
                and table_schema = {$pdo->quote($ta_bdd)}
                and table_name = {$pdo->quote($ta_table)}
        ) as is_table_exists
        SQL;
    Le résultat contiendra une unique ligne et une unique colonne is_table_exists valorisée TRUE ou FALSE selon si la table en paramètre existe ou non.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Membre régulier
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juillet 2019
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2019
    Messages : 130
    Points : 73
    Points
    73
    Par défaut
    Merci beaucoup SEB

    j'ai utilisé
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    prepare("SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_TYPE='BASE TABLE' AND TABLE_SCHEMA ='nom_de_ma_bse_de_donnees'");
    .
    ensuite j'ai déclaré un tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mon_array_de_tables=[];
    ensuite j'ai effectué un fetch et mis tous les noms de tables dans le tableau "mon_array_de_tables"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while($mon_array = $pdo->fetch(PDO::FETCH_ASSOC)){
       if (in_array($ma_table, $mon_array )) {
          array_push($mon_array_de_tables,$ma_table);
       }
    }
    ensuite j'ai terminé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if (in_array($ma_table, $mon_array_de_tables)) 
      {
        echo('Cette table existe déjà');
    }
    else{
    // CREATE la table ............
    // INSERT dans la table .......
    Cela fonctionne bien

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 159
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 159
    Points : 8 338
    Points
    8 338
    Billets dans le blog
    17
    Par défaut
    Est-ce l'objectif unique de $mon_array_de_tables ?
    Si oui on perd l'intention, ce qui rend le code inutilement lourd et difficile à lire

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    $ta_base = 'nom_de_ta_base';
    $ta_table = 'nom_de_la_table_à_chercher';
     
    $sql = <<<SQL
        select all exists (
            select all *
            from information_schema.tables
            where true
                and table_schema = {$pdo->quote($ta_bdd)}
                and table_name = {$pdo->quote($ta_table)}
        ) as is_table_exists
        SQL;
     
    $is_present = $pdo->query($sql)->fetchColumn();
     
    if ($is_present) {
        echo 'Cette table existe déjà';
    } else {
        // ...
    }
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  5. #5
    Membre régulier
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juillet 2019
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2019
    Messages : 130
    Points : 73
    Points
    73
    Par défaut
    Merci Seb. Cela fonctionne merveilleusement bien. J'avais concocté à ma manière une formule en utilisant un tableau sans réfléchir sur le reste. Bravo mec !

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

Discussions similaires

  1. create table if not exists
    Par olibara dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 18/03/2010, 16h01
  2. AS400 Probleme de Create table if not exists
    Par mczikas dans le forum Développement de jobs
    Réponses: 0
    Dernier message: 24/02/2009, 17h04
  3. Create procedure if not exists ?
    Par mappy dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/07/2008, 17h57
  4. provider 0x80040E37 table does not exist
    Par steph04 dans le forum ASP
    Réponses: 8
    Dernier message: 29/04/2005, 10h56
  5. [DB2] create table... if not exists ?
    Par iubito dans le forum DB2
    Réponses: 6
    Dernier message: 23/03/2004, 18h26

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