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

EDI, CMS, Outils, Scripts et API PHP Discussion :

Script générateur de Classe SQL -> PHP


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2018
    Messages : 11
    Points : 7
    Points
    7
    Par défaut Script générateur de Classe SQL -> PHP
    Bonjour,

    Alors voilà, je suis étudiant travaillant principalement mon SQL via SSMS (SQL Serveur Management Studio 2017 - Microsoft). Je dispose d'un script PHP qu'on a développé entre collègue pour me générer automatiquement mes classes métiers en PHP depuis ma BDD sous SSMS.

    Voici le script :

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    <?php
    $user = "xxxxx";
    $pwd = "xxxxx";
    $pdo = new PDO('mysql:dbname=stagiaire;host=xxx.xxx.xxx.xxx;port=xxxxx', $user, $pwd);
    $q = $pdo->query("sp_help");
    //$q = $pdo->query("Select table_name from information_schema.tables WHERE table_type = 'BASE TABLE' AND table_schema = 'xxxxx'");          // Test ne fonctionnant pas, trop de paramètres à retyper pour rien.
    $tables = $q->fetchAll(PDO::FETCH_ASSOC);
    $extends='Modele';
     
    foreach($tables as $v){
    	if($v['Object_type'] == 'table'|| $v['Object_type'] == 'view' &&  $v['Owner'] == 'db'){//
    		$class = $v['Name'];
    		$s = "";
     
    		$sql = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE Table_Name='".$class."'";
    		$q2 = $pdo->query($sql);
    		$fields = array_reverse($q2->fetchAll(PDO::FETCH_ASSOC));
     
    		$s .= "<?php\nclass ".ucfirst($class)." extends ".$extends." implements IProprietes{\n\tprotected ";//////////////////////debut class
    		foreach($fields as $v){$s .= "$".$v['COLUMN_NAME'].", ";}
    		$s = rtrim($s);
    		$s = rtrim($s, ",");
    		$s .= ";\n\n";
    		$s .= "\tpublic function __construct(";
    		foreach($fields as $v){$s .= "$".$v['COLUMN_NAME']."= null, ";}
    		$s = rtrim($s);
    		$s = rtrim($s, ",");
    		$s .= "){\n";///////////////////////////////////////////////////////////////////////////accolade construct
    		$s .= "\t\t";
    		$s .= "if(!(";
    		foreach($fields as $v)
    		{
    			$s .= "$".$v['COLUMN_NAME']." == null && ";
    		}
    		//enlever && et espace...............;
    		$s = rtrim($s);
    		$s = rtrim($s, "&&");
     
    		$s .= ") )";
    		$s .= "\n\t\t{";///////////////////////////////////////accolade if
    		foreach($fields as $v)
    		{
    			$s .= "\n\t\t\t"."$"."this->".$v['COLUMN_NAME']." = "."$".$v['COLUMN_NAME'].";";
    		}
    		$s .= "\n\t\t}";///////////////////////////////////////fin if
    		$s .= "\n\t}";////////////////////////////////////////////////////////////////////////////////////////fin construct
    		$s .= "
    	public function getProprietes(){
    		return get_object_vars($"."this);
    	}
    }";////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////fin class
    	}
    	if(file_put_contents('./'.$class.'.class.php', $s)){
    		echo nl2br($s);
    	}
    }

    Ce dernier fonctionne donc très bien sous SSMS.
    Le problème, étant actuellement en stage en société, je travaille sous SQL WorkBench 6.3.5 x64(et non pas SSMS 2017) du coup, mon script ne fonctionne pas (logique me diriez-vous), lorsque je tente d’exécuter ce dernier, voici l'erreur obtenue :

    Nom : erreurScript.png
Affichages : 479
Taille : 14,4 Ko

    Je suis donc remonté sur l'erreur et en effet utiliser "sp_help" ne fonctionne que sous SSMS et ses variantes, du coup, j'espérer pouvoir trouver une solution alternative cette ps intégrée à SSMS.

    Que cela soit sous forme de requête, ou autre, je suis preneur #help

    Merci d'avance!

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 690
    Points : 20 211
    Points
    20 211
    Par défaut
    Tout d'abord tu fais l'amalgame entre des clients (workbench,ssms) et des moteurs de base de données (mysql et sql server). Ce n'est pas la même chose.

    Ensuite si tu veux avoir un script qui fonctionne quelque soit la base de données , tu dois impérativement faire du SQL standard et non utiliser des fonctionnalités spécifiques comme sp_help.

    note : colle ton code entre balise [code ] plutôt qu'une capture , c'est compliqué à lire sur un screenshot.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2018
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Excuses mon erreur. J'ai modifié pour passé en Code, du coup. Oui, je suis bien d'accord pour le fait que cela ne fonctionne que sous SQL Server, pour le coup justement j'aimerai bien avoir un coup de main pour passer ce "sp_help" en SQL standard en fait, c'est là que j'ai du mal en réalité

    #débutant

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2018
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    J'ai commencé à faire un semblant d'ébauche pour la requête en standard, mais pour le coup je bloque cette fois, un petit coup de main ne serait pas de refus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $q = $pdo->query("USE INFORMATION_SCHEMA;");
    (cela ne m'affiche pas d'erreur mais me crée un fichier vierge unique intitulé ".class.php" au lieu de la totalité des classes de ma base.)

    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $q = $pdo->query("Select table_name, column_name from information_schema.tables, information_schema.columns WHERE table_type = 'TABLE' OR 'VIEW' AND table_schema = 'NomDeMaBDD'");
    (cela ne fait absolument rien de visible.)

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 690
    Points : 20 211
    Points
    20 211
    Par défaut
    sp_help peut être remplacé par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'nom_de_table'
    C'est compatible mysql et sql server 2000+
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2018
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par grunk Voir le message
    sp_help peut être remplacé par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'nom_de_table'
    C'est compatible mysql et sql server 2000+

    Le problème étant que cette requête nécessite une table précise, or, avec l'utilisation de SP_HELP, cela me récupérait toutes mes tables, et la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE Table_Name='".$class."'
    est utilisée par la suite, lorsque j'ai déjà récupérer mes tables.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $tables = $q->fetchAll(PDO::FETCH_ASSOC);
    $extends='Modele';
     
    foreach($tables as $v){
    	if($v['Object_type'] == 'table'|| $v['Object_type'] == 'view' &&  $v['Owner'] == 'dbo'){//
    		$class = $v['Name'];
    		$s = "";
     
    		$sql = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE Table_Name='".$class."'";

  7. #7
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 690
    Points : 20 211
    Points
    20 211
    Par défaut
    Suffit de lister les tables avant :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM INFORMATION_SCHEMA.Tables WHERE table_schema = 'nom_bdd';

    et ensuite de requeter les colonnes de chaque table

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'nom_de_table'

    Si ce que tu cherche c'est un équivalent à SP_HELP qui marche partout , ca n'existe pas.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2018
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Merci quand même du coup de main, j'ai je pense tout essayé, en vain, je vais me rabattre sur une façon à l'ancienne, soit faire toutes mes classes à la main!

Discussions similaires

  1. [MySQL] Script SQL et PHP
    Par SNY77 dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 31/01/2013, 11h25
  2. Un générateur de classe php / MSSQL
    Par zemeckis dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 06/05/2009, 14h07
  3. [SQL] Executer un script SQL depuis php
    Par sly3333 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 07/12/2007, 02h33
  4. Probleme de variable entre SQL et Php
    Par copin dans le forum Langage SQL
    Réponses: 6
    Dernier message: 17/06/2005, 11h58
  5. [Oracle] Exécuter une procédure PL/SQL en PHP?
    Par Cerberes dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 25/02/2005, 15h11

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