Précédent   Forum du club des développeurs et IT Pro > PHP > PHP & SGBD > PDO
PDO Forum d'entraide sur PDO (PHP Data Objects) : pilote générique de bases de données avec PHP. Avant de poster -> FAQ PDO et Cours PDO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Actualité déjà publiée
 
Outils de la discussion
Publicité
'
Vieux 29/10/2010, 18h06   #21
FMaz
Membre expérimenté
 
Avatar de FMaz
 
Inscription : mars 2005
Messages : 649
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 649
Points : 527
Points : 527
Ca peut sembler étrange, mais c'est tout à fait volontaire de ma part. Cet article n'est pas un "tutorial à copier coller", qui explique et guide l'utilisateur vers une solution.

Il s'agit d'un article concret, qui se veux une base de compréhension. En somme, si je veux expliquer comment se connecter, je ne veux pas enfouir les lignes importantes sous du code qui n'est pas nécessairement lié à l'explication. (J'ai souvent des clients qui m'arrivent avec du code qu'ils ont bêtement copié-collé de tutoriels et dont 50% de celui-ci est strictement inutile au projet. Au Québec on dit souvent: "trop c'est comme pas assez.")

Donc il y a 2 buts à cet article:
- Être un premier contact avec PDO, et permettre à un débutant de mieux comprendre les concepts derrière les futurs tutoriels qu'il lira.
- Faire réaliser certains concepts à la base même de PDO qui ne sont pas toujours bien expliqué à une personne ayant déjà essayé, ou utilisant déjà PDO.

Donc en aucun cas cet article ne prétend être un tutoriel du type "lisez-moi et convertissez vos projets vers PDO immédiatement après"

Je n'ai pas abordé les exceptions plus qu'il faut, car je pense que le sujet dépasse le cadre de cet article, et je préférais consacrer un autre article bien distinct à ce sujet, qui est assez vaste quand même. (Et lorsque cet article existera, je ferais un beau lien: promis !)
FMaz est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/10/2010, 18h10   #22
stealth35
Modérateur
 
Inscription : septembre 2010
Messages : 7 958
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 958
Points : 9 508
Points : 9 508
Citation:
Envoyé par FMaz Voir le message
Je n'ai pas abordé les exceptions plus qu'il faut, car je pense que le sujet dépasse le cadre de cet article, et je préférais consacrer un autre article bien distinct à ce sujet, qui est assez vaste quand même. (Et lorsque cet article existera, je ferais un beau lien: promis !)
Donc mettre le ERRMODE_WARNING pour la connexion serai plus logique
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 29/10/2010, 18h13   #23
FMaz
Membre expérimenté
 
Avatar de FMaz
 
Inscription : mars 2005
Messages : 649
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 649
Points : 527
Points : 527
Hum, tu me place face à un dilemme :
- Si je configure ca en WARNING, c'est comme si je décourageais l'utilisation des exceptions.
- Si je met des try-catch, je vais contre mon principe de simplicité...

Bon bon, et si j'accepte de mettre un try-catch pour la connexion, tu va en exiger pour tous les exemples qui suivent aussi ?

(Négocier, toujours négocier )
FMaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/10/2010, 18h41   #24
stealth35
Modérateur
 
Inscription : septembre 2010
Messages : 7 958
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 958
Points : 9 508
Points : 9 508
Citation:
Envoyé par FMaz Voir le message
Hum, tu me place face à un dilemme :
- Si je configure ca en WARNING, c'est comme si je décourageais l'utilisation des exceptions.
- Si je met des try-catch, je vais contre mon principe de simplicité...

Bon bon, et si j'accepte de mettre un try-catch pour la connexion, tu va en exiger pour tous les exemples qui suivent aussi ?

(Négocier, toujours négocier )
le try...catch pour la connexion est de toutes façons obligatoire, sinon impossible de savoir si c'est connecter, (a part avec if et instanseof PDO)

on va dire si on fait du procédurale c'est plus simple de d'utilisé les exceptions, si on fait de l'objet on se tournera plus vers les exceptions, et rien n'empêche dans une classe de faire set_exception_hanlder non plus
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/10/2010, 18h58   #25
FMaz
Membre expérimenté
 
Avatar de FMaz
 
Inscription : mars 2005
Messages : 649
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 649
Points : 527
Points : 527
Et maintenant ?
http://fmaz.developpez.com/tutoriels...re-pdo/#LIII.a

J'en ai profité pour faire 3 choses:
- Montrer comment faire une trace d'une erreur.
- Gérer l'exception
- Ajouter la note sur le bug avec PHP 5.3.0
FMaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/10/2010, 19h03   #26
stealth35
Modérateur
 
Inscription : septembre 2010
Messages : 7 958
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 958
Points : 9 508
Points : 9 508
la t'auras un Fatal error à chaque erreur de requête fausse

EDIT : t'as pas besoin de faire closeCursor() apres un fetchAll, c'est uniquement quand tu ne parcours pas tout les fetch (et y'a aussi fetchAll pour mysqli, mais uniquement quand il compilé avec mysqlnd donc <= 5.3.0)
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/10/2010, 19h07   #27
FMaz
Membre expérimenté
 
Avatar de FMaz
 
Inscription : mars 2005
Messages : 649
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 649
Points : 527
Points : 527
Oui, je sais, c'est bien ce que j'ai dis plus haut ...
Mais je vais pas mettre des try-catch pour tout les exemples, ca serait pénible à la lecture.

Bon, je vais ajouter une note en même temps que celle qui dit que je ne vais pas ré-établir une connexion pour tous les exemples.
FMaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/10/2010, 19h11   #28
stealth35
Modérateur
 
Inscription : septembre 2010
Messages : 7 958
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 958
Points : 9 508
Points : 9 508
pourquoi tu voudrais ré-établir une connexion ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/10/2010, 19h14   #29
FMaz
Membre expérimenté
 
Avatar de FMaz
 
Inscription : mars 2005
Messages : 649
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 649
Points : 527
Points : 527
Regarde le dernier paragraphe de la section http://fmaz.developpez.com/tutoriels...re-pdo/#LIII.a
FMaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/10/2010, 19h17   #30
stealth35
Modérateur
 
Inscription : septembre 2010
Messages : 7 958
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 958
Points : 9 508
Points : 9 508
ah oui ok, j'avais mal compris
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/10/2010, 21h59   #31
Petibidon
Membre chevronné
 
Inscription : mars 2005
Messages : 588
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 588
Points : 659
Points : 659
J'ai pas vu d'exemple à propos de la méthode bindparam() dans ce tuto ?

Un exemple d'utilisation pratique pour des insertions massives :
Code :
1
2
3
4
5
6
7
8
9
10
11
 
$noms = array( "tillom", "hochon", "issier" , "issier" );
$prenoms = array( "jean" , "paul" , "paul" , "pat" );
$stmt = $pdo->prepare( 'insert into maTable (nom, prenom) values (:nom,:prenom)' );
$stmt->bindparam( ":nom" , $nom , PDO::PARAM_STR );
$stmt->bindparam( ":prenom" , $prenom , PDO::PARAM_STR );
 
foreach( $noms as $cle=>$nom ){
	$prenom = $prenoms[ $cle ];
	$stmt->execute();
}
__________________
Pourfendeur de singletons en croisade
Petibidon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/11/2010, 15h59   #32
FMaz
Membre expérimenté
 
Avatar de FMaz
 
Inscription : mars 2005
Messages : 649
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 649
Points : 527
Points : 527
Je sais. Il ne m'a pas semblé utile de couvrir cette fonction qui s'avère nécéssaire (obligatoire) que dans des cas très particulié.

Merci cependant pour les précisions dans les commentaires
FMaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/11/2010, 16h02   #33
stealth35
Modérateur
 
Inscription : septembre 2010
Messages : 7 958
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 958
Points : 9 508
Points : 9 508
Citation:
Envoyé par FMaz Voir le message
Je sais. Il ne m'a pas semblé utile de couvrir cette fonction qui s'avère nécéssaire (obligatoire) que dans des cas très particulié.

Merci cependant pour les précisions dans les commentaires
ouai pour du param_str et sans le param length ca sert pas a grand chose
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/11/2010, 21h21   #34
Madfrix
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 323
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 323
Points : 2 374
Points : 2 374
Citation:
Envoyé par stealth35 Voir le message
ouai pour du param_str et sans le param length ca sert pas a grand chose
Pour une question de sécurité ou autre ?

Perso je mets jamais de param length, j'ai surement tords mais je délègue la longueur de ma chaine à ma base ( varchar(50), varchar(100)...). A lui de tronquer !

Mais de toute manière, quand j'arrive à insérer en base, les contrôles php ont déjà été effectués en amont donc ce param ne me sers pas (du moins je pense)
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/11/2010, 21h33   #35
stealth35
Modérateur
 
Inscription : septembre 2010
Messages : 7 958
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 958
Points : 9 508
Points : 9 508
Citation:
Envoyé par Madfrix Voir le message
Pour une question de sécurité ou autre ?
non c'est plus dans le sens ou par défaut tout est binder en str
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/11/2010, 21h50   #36
Madfrix
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 323
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 323
Points : 2 374
Points : 2 374
oki je croyais que tu rebondissais sur l'exemple de Petitbidon qui utilisait PDO:ARAM_STR sans longueur
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/11/2010, 22h00   #37
stealth35
Modérateur
 
Inscription : septembre 2010
Messages : 7 958
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 958
Points : 9 508
Points : 9 508
Citation:
Envoyé par Madfrix Voir le message
oki je croyais que tu rebondissais sur l'exemple de Petitbidon qui utilisait PDO:ARAM_STR sans longueur
oui, ducoup le bind sert a rien puisque tout est par defaut, ca aurai été plus parlant avec un PARAM_INT, ou avec le paramètre length

sinon on peux aussi mettre les tableau ou des objets en paramètre

Code :
1
2
$stmt->bindparam( ":nom" , $row['nom'] , PDO::PARAM_STR );
$stmt->bindparam( ":prenom" , $row['prenom'] , PDO::PARAM_STR );
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/11/2010, 22h07   #38
Madfrix
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 323
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 323
Points : 2 374
Points : 2 374
ou alors créer des objets personne avec stdclass ou une classe Personne de facon à ce que si un nom ou un prenom manque, il soit insérer NULL en table et qu'il y est pas d'erreurs de membre prenom/nom manquant mais c'est un autre sujet^^
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/11/2010, 22h09   #39
stealth35
Modérateur
 
Inscription : septembre 2010
Messages : 7 958
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 958
Points : 9 508
Points : 9 508
Citation:
Envoyé par Madfrix Voir le message
ou alors créer des objets personne avec stdclass ou une classe Personne de facon à ce que si un nom ou un prenom manque, il soit insérer NULL en table et qu'il y est pas d'erreurs de membre prenom/nom manquant mais c'est un autre sujet^^
ouai, voir le top faire un FETCH_CLASS
faudrais que je fasse un sujet sur les FETCH y'a plein de truc simpa, comme le class, into, lazy, func et surtout le group
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/11/2010, 22h21   #40
Madfrix
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 323
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 323
Points : 2 374
Points : 2 374
Jamais utilisé FETCH_CLASS alors je suis pas contre un tuto

Demain pour 10h c'est possible ?

J'ai maintenant l'habitude d'utiliser le module Zend_Db pour le mapping et je dois dire que parfois on devient un peu fainéant avec et qu'on oublie "les bases"
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Actualité déjà publiée
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 05h21.


 
 
 
 
Partenaires

Hébergement Web