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 :

Fonctions PHP et SQL


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
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 13
    Par défaut Fonctions PHP et SQL
    Bonjour à tous,

    Alors voilà, j'ai plusieurs fichiers, un qui regroupe tout un tas de fonctions portant le nom d'action en SQL (create table, drop table, etc...)
    J'ai un fichier de connexion à la base de données, celui là est ok, lorsque je test en créant des requêtes "en dur" dans une variable $sql et que je continue avec un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $res = $mysqli->query($sql);
    Ca créer bien ma table dans la base.
    Mais je ne souhaite pas écrire ma requête en dur !
    Je souhaite avoir des fonctions " action sql" d'un côté, et un tableau avec des arguments de l'autre côté.

    Des exemples seront plus parlant :
    Fichier de fonction :

    Code : 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
    abstract class DBMigration
    {
        abstract protected function up();
        abstract protected function down();
     
     
        // $my : connection MySQL (déjà ouverte)
        // $log : fichier de log (déjà ouvert)
        public function __construct($mysqli, $log) {
          $this->mysqli = $mysqli;
          $this->log = $log;
        }
     
        // Création d'une table avec la liste des colonnes et leur type
        public function create_table($tablename, $columns) {
                require_once("migrations/test.php");
                $migration = new CreateTableCountries($mysqli, $log);
                $res = $mysqli->query($sql);
                $migration->up();
        }
    Puis mon fichier test.php contenant ce que je veux ajouter dans ma table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      class CreateTableCountries extends DBMigration {
     
        public function up() {
          // Création de la table countries
            $this->create_table('countries', array(
            'id' => 'integer(11)',
            'name' => 'varchar(255)',
            ));
        }
    En gros la fonction up() servira pour tout ce qui est create table, tandis que j'aurais également une fonction down() pour tout ce qui est drop tables.

    Pour résumer :

    2 fichiers, un comprenant les fonctions create table, drop table, etc...
    L'autre pour tout ce qui est fonction up et créations des tables.

    Maintenant ma question est : Que dois-je mettre dans mon premier fichier dans les fonctions create table par exemple pour que ça créer effectivement la table que je défini dans mon fichier test.php ? Je rappelle que je ne souhaite pas écrire la requête en dur.
    Ce que j'ai fait actuellement ne retourne pas d'erreur mais ne me créer pas ma table pour autant.

    Je suis un débutant complet en php, soyez indulgents svp :p

    Merci d'avance !
    Janesh

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2012
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 133
    Par défaut
    Salut,

    Rien de bien difficile ici, si tu as réussi à imaginer ça c'est que tu n'es plus un débutant du coup je ne vois pas bien qu'est ce qui te bloque ?
    Poste le code de createTable, mais bon si tu sais faire une requête CREATE TABLE et une concaténation PHP ...

    Sinon, un troisième argument serait le bienvenue contenant un array qui représenterait la clé primaire.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 13
    Par défaut
    Salut et merci de prendre du temps pour m'aider
    Etant donné que c'est un projet scolaire de groupe, ce n'est pas moi qui ai imaginé intégralement cette structure (j'ai vu des manières de faire bien plus simple sur le net donc je me serais pas embêté avec ça...)

    SI je poste c'est justement car je ne trouve pas la solution par moi même :p
    Donc oui je sais faire un create table en SQL, je sais aussi concaténer, mais ma question c'est : avec quoi ? Je ne sais pas trop ce que je dois mettre justement dans cette fonction, dois-je concaténer avec mon array de l'autre fichier...?

  4. #4
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2012
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 133
    Par défaut
    Dans ta classe DBMigration, tu ajoute une méthode "create_table" qui, grâce aux paramètres en entrée, va construire la requête CREATE TABLE.
    Comme dans DBMigration tu as une ressource $mysqli, tu peux exécuter ta requête.

    Code : 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
     
    	/**
    	 * @param string $tableName
    	 * @param array $tableParams
    	 * @return null
    	 */
    	public function create_table($tableName, $tableParams) 
    	{
    		// construction de la requête
    		//...
     
    		// exécution de la requête
    		//...
     
    		return ;
    	}

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 13
    Par défaut
    C'est peut être pas très lisible dans mon premier message comme j'ai balancé pas mal de code, mais j'avais déjà commencé à la créer cette méthode create_table avec des paramètres (il faut scroll dans le code que j'ai link sur la classe DBMigration), mon souci étant que ce que la partie "construction de la requête" et "exécution de la requête" ne fonctionne pas comme je veux, mon but je le rappelle c'est de pouvoir dans la méthode create_table exécuter la fonction up() de mes autres fichiers de création de table (il y en aura plusieurs).

    Donc en gros quand j'vais exécuter ma fonction up dans create_table ça va déclencher la création de table, de mon fichier test.php, le tout sans noter en dur la requête mais juste en prenant ce qu'il y a dans le fichier test.php, donc le nom de l'array c'est le nom de la table et les paramètres c'est le contenu de ma requête.

    Je suis plus clair ? ^^

  6. #6
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2012
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 133
    Par défaut
    Ok, donc je n'avais effectivement pas compris ta problématique de ton point de vue.

    mon but je le rappelle c'est de pouvoir dans la méthode create_table exécuter la fonction up() de mes autres fichiers de création de table (il y en aura plusieurs).
    Ça c'est problématique puisque up appelle create_table, tu vas nous faire une récursion infinie là ^^.
    create_table ne doit pas appeler up mais up doit bien appeler create_table.

Discussions similaires

  1. [MySQL] [Requête SQL] Question Fonctions PHP
    Par Paul75 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 22/09/2008, 09h05
  2. [SQL] Regrouper des valeurs : fonction php équivalente à Group BY
    Par thibaut06 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 11/02/2008, 14h58
  3. [SQL] Résultat de fonction php non valide dans requête SQL
    Par darksnake dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/12/2007, 13h44
  4. [SQL] comment "desactiver" une fonction php dans une page?
    Par horas dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 27/05/2007, 15h04
  5. [CSV] Fonction PHP pour SQL Server
    Par wolflinger dans le forum Langage
    Réponses: 2
    Dernier message: 17/05/2006, 12h57

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