Consultez la formation SEO spéciale Wordpress
par WebRankInfo / Ranking Metrics

Messages: 2765

Enregistré le: 14 Aoû 2002

Message le Mer Fév 08, 2017 23:19

Rebond

J'y ai remis un beau formulaire, il suffit d'entrer l'ordre MySQL de test et de cliquer sur le bouton.

Facile à utiliser. : https://www.pronostics-courses.fr/essai_mysql/essai_mysql.php

Je n'ai pas encore les setters pour les set des update, mais çà va venir. ;)

Bien amicalement.
Haut
Messages: 2765

Enregistré le: 14 Aoû 2002

Message le Ven Fév 10, 2017 0:27

Voili, voilou

Maintenant, le soft supporte en théorie les update, insert, replace, select, delete ( j'ai pas essayé ), et donne ces 4 éléments :

1) Requête MySQL formatée,

2) Requête prepare formatée,

3) Les Setters et Getters. Ce ne sont que des libellés non programmés.

4) Les bindParam(). Ceux-là sont programmés.

Il y a des Getters en trop.

Pour les Setters, je ne met que ceux dont l'opérateur est le signe égal ( = ). ( avec un filtrage ).

J'ai besoin que vous testiez pour m'indiquer les erreurs éventuelles.

J'ai mis sur un fichier l'ensemble de la syntaxe MySQL 5.7

Je vais écrire tous les ordres MySQL possibles, et les passer à la moulinette.

Respectueusement.
Haut
Messages: 2765

Enregistré le: 14 Aoû 2002

Message le Mer Fév 15, 2017 10:24

Bonjour

Je ne cherche pas, à générer des ordres MySQL dynamiquement en POO, comme me l'a suggéré Spout.

J'ai l'intention d'utiliser des Setters et Getters, et je peux facilement filtrer/limiter leur production sur mon interface, en fonction des opérateurs entre autre, mais j'aurais besoin de savoir sur le plan théorique-utilisation d'une interface POO MySQL, comment doivent être utilisés ces getters/setters.

Pour l'instant je produis un setter quand la value est présente, et que c'est un SET suivant un INSERT ou un UPDATE, ou un DUPLICATE suivant un UPDATE, et que l'opérateur est le signe d'affectation ( = ).

Sinon c'est un getter.

Mais, il y a le cas des opérateurs de comparaison ( par exemple des WHERE ), ayant donc une value, quelle serait l'utilisation d'un getter ou setter dans ce cas ?

Plus généralement, quelle est l'utilisation des setter/getters en général ?

Merci beaucoup de vos réponses.

Respectueusement.
Haut
Messages: 2765

Enregistré le: 14 Aoû 2002

Message le Ven Fév 17, 2017 10:35

Bonjour

Suite à ma lecture de la documentation de Laravel ( uniquement le topic "Database" relatif à l'ORM Eloquent ), je pense adopter pratiquement les mêmes fonctions d'accès MySQL que celles d'Eloquent, en mode réduit. ( quelques fonctions en moins ).

Ceci, avec un code PHP ( de mon interface ) plus réduit, du moins deux ou trois scripts PHP.

Mais, je ne sais pas encore sous quelle forme ( interface sinon codage PHP ), j'assurerai la mémorisation des ordres MySQL de départ, à compléter/modifier après :

Code: Tout sélectionner

// Initial
$conn = new Database("SELECT num1, num2 FROM Table1 WHERE Id LIKE 'value'");

$tmp_array = $conn->get();

// $tmp_array est une array double ( ou équivalent objet ), à traiter.
     
// Modification :
$tmp_array = $conn->WHERE('Id', 'LIKE', 'value2')->get();

// Idem



En résumé, je ne tiens pas à faire du tout intégré POO comme Spout me l'a indiqué, et oui, je te suis très reconnaissant de m'avoir indiqué l'existence de Laravel.

Cependant, je pense ( je me trompe probablement ), que le codage MySQL en pur POO avec les fonctions de Eloquent, nécessite une réécriture de chaque ordre MySQL quand celui-ci est légèrement modifié.

Et aussi, d'après la doc de Laravel, les instructions complexes SQL, doivent être écrites en mode raw, ce qui ôte un peu de son intérêt à la syntaxe simplifiée de Eloquent.

J'ai la réponse ( grâce à Eloquent ), à ma question de l'utilisation des settrers/getters.

Spout merci pour ton aide. ;)

Très respectueusement.
Haut
Messages: 2765

Enregistré le: 14 Aoû 2002

Message le Sam Mar 18, 2017 11:54

Bonjour

Je met au point-prépare la librairie MySQL orientée objet, que je guigne depuis longtemps.

J'ai l'intention, de présenter l'interface aux programmeurs ( moi ) de cette manière :

Code: Tout sélectionner
 

    /*
     * ( équivalent Setter )
     */
     Table->INSERT->Column=value;

     Idem pour les REPLACE ou UPDATE, ou DUPLICATE KEY




Voici le problème, pour les SELECT :

Code: Tout sélectionner
                $sql_initiale = select sb1,sb2,sb3 FROM (select s1 AS sb1, s2 AS sb2, s3*2 AS sb3 FROM t1) AS sb where sb1 > 1

                Instuctions MySQL resultantes :
                $sql_prepare = SELECT sb1, sb2, sb3 FROM (SELECT s1 AS sb1, s2 AS sb2, s3 * 2 AS sb3 FROM t1) AS sb WHERE sb1>1
                prepare(SELECT sb1, sb2, sb3 FROM (SELECT s1 AS sb1, s2 AS sb2, s3 * :s3_1 AS sb3 FROM t1) AS sb WHERE sb1>:sb1_2);

                bindParam(:s3_1, 2, 1);
                bindParam(:sb1_2, 1, 1);



La valeur 2 dans le SELECT ( s3 * 2 AS sb3 ) est une value, donc je devrais prendre en compte la possibilité que cette value soit variable.

Donc, je dois pouvoir l'affecter dans mon interface.

Mais, de quelle manière en orienté objet ?

Comment va réagir l'utilisateur, pour affecter cette value ?

Pour ce qui est des WHERE, ceci devrait suffire :

Table->WHERE->Column('operator', value);

Merci de me dire vos suggestions.

Respectueusement.
Haut
Messages: 2765

Enregistré le: 14 Aoû 2002

Message le Sam Mar 18, 2017 18:41

Rebonjour

Problème pur de programmation orientée objet :

Supposons que j'ai ces 4 valeurs dans une array de ce type :

array('Table', 'INSERT', 'Column', value)

Evidemment je peux pour l'instant faire une affectation avec ces éléments, qui ne soit pas orientée objet.

Comment programmer ( dans une classe Database ) le setter suivant ?

Table->INSERT->Column(value);

de telle manière, que le fait de lancer ( n'importe quel $sql ) :

$conn = Database($sql)

$conn->Table->INSERT->Column($value);

permette de faire l'équivalent de l'affectation, mais en mode orienté objet ?

Merci beaucoup de vos réponses.

Respectueusement.
Haut
Messages: 2765

Enregistré le: 14 Aoû 2002

Message le Sam Mar 18, 2017 22:56

Bonjour

Changement de montre, changement de Kelton.

Je vais probablement ( mais ce n'est pas sûr ) adopter ( à peu près ) la syntaxe de Laravel, mais en majuscules.

De la forme :

TABLE('Table')->WHERE('champ', 'operator', value)->GET();

ou :

TABLE('Table')->INSERT(array('champ1' => value1, 'champ2' => value2, etc...));

A charge pour moi de faire des classes ou des fonctions pour ces tokens :

TABLE, WHERE, GET, INSERT, etc...

Je vais voir pour les dépendances entre classes.

Il faudrait que ce soit compatible, avec des Prepare() réutilisables, des bindParam() et des Execute().

Bien amicalement.
Haut
Messages: 8554

Enregistré le: 14 Mai 2003

Message le Dim Mar 19, 2017 9:30

Franchement je comprend tjs pas pourquoi ne pas utiliser directement Eloquent ?
Largement utilisé, unit testé, supporte MySQL, Postgres, SQLite, SQL Server..., PSR/autoloading, gestion des relations, accessors/mutators, casting automatique, events, ... bref pleins de trucs que t'as même pas imaginé et pourtant super pratique.
Haut
Messages: 2765

Enregistré le: 14 Aoû 2002

Message le Dim Mar 19, 2017 10:24

Bonjour Spout ;)

Merci beaucoup de ton aide.

Sur le plan de la syntaxe, comment ( en Laravel ) , faire le sql suivant ? :

Code: Tout sélectionner

  SELECT * FROM MyTable  WHERE ( 'Champ1'='value1' AND 'Champ2'='value2' ) OR 'Champ3'='value3';



Peut-on faire :

Code: Tout sélectionner

  DB::table('MyTable')->where([['Champ1', '=', 'value1']
                               ['Champ2', '=', 'value2']
                               ])->orWhere(Champ3', '=', 'value3')->get();



Si c'est possible, je suppose que l'on peut spécifier n'importe quel logique booléenne par rapport aux conditions des where ?

C'est simplement pour le modèle syntaxique.

Merci beaucoup de ta réponse.

Respectueusement.
Haut
Messages: 2765

Enregistré le: 14 Aoû 2002

Message le Dim Mar 19, 2017 12:02

Bonjour Spout

Pour résoudre le problème des conditions where complexes, je vais tâcher de faire une conversion automatique, de la notation infixe vers la notation postfixe ( polonaise inversée ), avec l'algorithme Shunting-yard.

Après, je tâcherai de rendre indépendants les clauses where, et de mettre des save().

J'aurais des problèmes si je mettais bout à bout plusieurs clauses where.

Amicalement.
Haut
Messages: 2765

Enregistré le: 14 Aoû 2002

Message le Dim Mar 19, 2017 13:18

Problème :

Pour traduire de l'infixe en notation polonaise inversée :

- Comment présenter quelque chose de traduisible automatiquement ( du texte), et qui doit aussi être un composé d'instructions PHP ?


Ou bien, en gardant la notation infixe :

- Comment rajouter des parenthèses à la notation Laravel des where ?

Ceci, sans mettre d'instructions "function($query)(where( ) etc... )" dans les instructions Laravel ?

Correction : Seule solution : deux instructions PHP dédiées simulant les parenthèses.

La Palice ...


Merci beaucoup de vos réponses.

Amicalement.
Haut
Messages: 2765

Enregistré le: 14 Aoû 2002

Message le Dim Mar 19, 2017 18:40

Rebonjour Spout

Je tiens à faire cette interface, car Laravel nécessite quand même de faire beaucoup de choses en mode raw.


Voilà, je vais adapter pour mes besoins la syntaxe de Laravel :

Je vais adapter toutes les conditions logiques where à l'intérieur d'un seul WHERE, avec des arrays :

Exemple de where :

( ( where_unique1 AND where_unique2 ) OR ( where_unique3 AND where_unique4 ) ) AND ( where_unique5 )

Ma traduction :

Code: Tout sélectionner

  DB::TABLE('MyTable')->WHERE( array(
                              array('where_unique1', 'AND', 'where_unique2'),
                               'OR', array('where_unique3', 'AND', 'where_unique4')
                              ), 'AND', 'where_unique5')->get();




De toute façon, je fais un parsing, celà ne me gêne pas de parser une seule clause WHERE.

Chaque clause where_i , est de la forme :

where_i = array('Champ_i', 'op_i', value_i)

Cette interface me permet de présenter du contenu parsable, à traiter dans ma classe WHERE.

Elle me permettra aussi, de spécifier n'importe quel ensemble de conditions, ce que ne permet pas Laravel.

A part OR et AND, il y a aussi XOR ( je crois ) non traité par Laravel.

Et puis, plus besoin de rabouter à perte de vue des conditions difficilement interprétables avec des where complexes.

J'obligerai seulement le pauvre programmeur que je suis, à mettre toutes les conditions, même implicites.

Merci de vos réponses.

Très respectueusement.
Haut
Messages: 8554

Enregistré le: 14 Mai 2003

Message le Dim Mar 19, 2017 19:15

ortolojf a écrit:car Laravel nécessite quand même de faire beaucoup de choses en mode raw.

Non.
A mon travail j'ai même utilisé des pipelined Oracle sans devoir faire de raw.
Haut
Messages: 2765

Enregistré le: 14 Aoû 2002

Message le Dim Mar 19, 2017 21:25

Bonjour Spout

Laravel, pour moi, c'est peut-être relativement simple d'utilisation, mais je suis rétif à installer ce théorique framework ( je sais c'est une orm pas un framework ), car j'ai peur en général des framework.

A cause des ressources en RAM ( je n'ai que 8 Go sur mon VPS SSD 2016 OVH ).


Je n'ai plus ( sur le plan conceptuel ), qu'à savoir comment traiter les fonctions agrégats, et autres babioles à laisser telles quelles.

Celà, malgré le fait que je ne veux qu'un seul WHERE par instruction MySQL.

Il y a les agrégats dans les where et les select.

Dans les select, je vais laisser les fonctions d'origine MySQL.

Et dans les where aussi, puisque je parserai ces clauses where.

D'autre part, ( excusez du peu ), je me suis aperçu que je n'ai jamais utilisé dans mon site, de clause JOIN pour les instructions MySQL multi-tables. Je les convertirai après la mise au point de l'interface.

Pour le développement de cette interface, je vais y aller progressivement, lentement, en essayant de résoudre les difficultés au fur à mesure.

Je vous tiendrai au courant.

Respectueusement.
Haut
Messages: 8554

Enregistré le: 14 Mai 2003

Message le Lun Mar 20, 2017 9:23

Laravel c'est le framework dit "full stack"
Eloquent c'est l'ORM de Laravel, utilisable en standalone.
Haut
Messages: 2765

Enregistré le: 14 Aoû 2002

Message le Lun Mar 20, 2017 9:53

Bonjour

Merci beaucoup Spout . ;)

Ton aide m'a permis d'évaluer ce qui reste à faire.

Très amicalement et respectueusement.
Haut

Formation recommandée sur ce thème :

Formation SEO spéciale Wordpress : apprenez à optimiser le référencement naturel d'un site fait avec Wordpress... Formation Ranking Metrics animée par un expert SEO / Wordpress.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.