Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/05/2011, 14h34   #1
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
Par défaut pdo : ne pas choisir entre exec et query

Bonjour,

avant, j'avais codé une interface pour exécuter toute requête SQL sur une table MYSQL. Quelle que soit la requête, j'utilisais mysql_query, fonction à laquelle je passais la requête saisie par l'utilisateur (et s'il se trompait, ça affichait un message d'horreur ()). Maintenant, je voudrais coder la même interface avec PDO ; or, selon, la requête il faut utiliser soit la méthode exec, soit la méthode query. Comme d'avance, on ne sait quelle va être la bonne, est-il possible de passer la requête aux 2 méthodes et selon le résultat, distinguer quelle était la bonne ?
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 14h54   #2
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 802
Points : 1 515
Points : 1 515
Tu peux toujours tout passer par la méthode query() avec PDO, cette fonction gère tous les types de requêtes.
Mais il vaut mieux si tu as des paramètres passer par des requête préparées.
__________________
Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 15h44   #3
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
OK, ne sachant pas encore ce que sont les requêtes préparées, je vais regarder, mais pour mon interface, n'ayant aucune information, je vais utiliser la méthode query().
Cela dit, avant, n'ayant aucune idée du retour, je faisais
Code :
while ($ligne = mysql_fetch_array($result, MYSQL_NUM))...
Comment faire maintenant ?
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 16h00   #4
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 802
Points : 1 515
Points : 1 515
Avec l'objet retourné par PDO::query() qui est un PDOStatement.
Code php :
1
2
// Soit $res notre retour de query()
while ($ligne = $res->fetch() )
__________________
Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 16h16   #5
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
ou direct
Code :
foreach ($res as $ligne)
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 16h43   #6
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
OK, mais pour l'instant, la requête n'est même pas exécutée ! surement une erreur bête de PHP : notamment la connexion utilise try, et je ne l'ai jamais utilisé ; il y a des chances que l'erreur soit là ; voici mon code :
Code :
1
2
3
4
5
6
include_once("connect_pdo_1and1.php");
 
$connexion = connect();
$sql=---;
 
$resultats=$connexion->query($sql);...
avec connect_pdo_1and1.php :
Code :
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
<?php 
function connect() {
try
{
$PARAM_hote='---'; // le chemin vers le serveur
$PARAM_port='---';
$PARAM_nom_bd='---'; // le nom de votre base de données
$PARAM_utilisateur='---'; // nom d'utilisateur pour se connecter
$PARAM_mot_passe='---'; // mot de passe de l'utilisateur pour se connecter
$dsn = 'mysql:host='.$PARAM_hote.';dbname='.$PARAM_nom_bd;
//var_dump($dsn);
$connexion = new PDO($dsn, $PARAM_utilisateur, $PARAM_mot_passe);
$connexion ->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
 
}
 
catch(Exception $e)
{
        echo 'Erreur : '.$e->getMessage().'<br />';
        echo 'N° : '.$e->getCode();
}
return($connexion);
}
 
?>
L'erreur affichée est :
Citation:
Fatal error: Call to a member function query() on a non-object in /homepages/18/d246623212/htdocs/bdd/traitrequete_pdo.php on line 11
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 16h55   #7
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
fait un var_dump($connexion);
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 22h18   #8
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
résultat : NULL
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 07h38   #9
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 128
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 128
Points : 7 270
Points : 7 270
Bonjour,

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function connect() {
try
  {
       $PARAM_hote='---'; // le chemin vers le serveur
       $PARAM_port='---';
       $PARAM_nom_bd='---'; // le nom de votre base de données
       $PARAM_utilisateur='---'; // nom d'utilisateur pour se connecter
       $PARAM_mot_passe='---'; // mot de passe de l'utilisateur pour se connecter
       $dsn = 'mysql:host='.$PARAM_hote.';dbname='.$PARAM_nom_bd;
       //var_dump($dsn);
       $connexion = new PDO($dsn, $PARAM_utilisateur, $PARAM_mot_passe);
       $connexion ->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
       var_dump($connexion);
       return($connexion);
  }
 
catch(Exception $e)
  {
        echo 'Erreur : '.$e->getMessage().'<br />';
        echo 'N° : '.$e->getCode();
  }
}
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 16h09   #10
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
Quel est le problème ?
Code :
1
2
3
4
5
$sql = stripslashes($_POST['requete']);
echo ('sql='.$sql.'<br>');
$res=$connexion->query($sql);
foreach ($res as $ligne)
    echo($ligne);
La requête est "show tables" et ça m'affiche
Citation:
ArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArray
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 16h15   #11
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 16h19   #12
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
Oui, mais à quel endroit, car :
Code :
1
2
3
4
5
$sql = stripslashes($_POST['requete']);
echo ('sql='.$sql.'<br>');
$res=$connexion->query($sql);
foreach ($res as $ligne)
    print_r($ligne);
pas bon...
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 16h49   #13
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
regarde ta source HTML il devrait t'afficher quelque chose la
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 16h59   #14
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
Quand je regarde la source html, je vois la même chose qu'avec le print_r ; ça :
Citation:
Array ( [Tables_in_db317093416] => act_dec3 [0] => act_dec3 ) Array ( [Tables_in_db317093416] => act_div3 [0] => act_div3 ) Array ( [Tables_in_db317093416] => act_geoloc [0] => act_geoloc ) Array ( [Tables_in_db317093416] => act_log [0] => act_log ) Array ( [Tables_in_db317093416] => act_mar3 [0] => act_mar3 ) Array ( [Tables_in_db317093416] => act_metadb [0] => act_metadb ) Array ( [Tables_in_db317093416] => act_metalg [0] => act_metalg ) Array ( [Tables_in_db317093416] => act_mgrplg [0] => act_mgrplg ) Array ( [Tables_in_db317093416] => act_nai3 [0] => act_nai3 ) Array ( [Tables_in_db317093416] => act_params [0] => act_params ) Array ( [Tables_in_db317093416] => act_prenom [0] => act_prenom ) Array ( [Tables_in_db317093416] => act_sums [0] => act_sums ) Array ( [Tables_in_db317093416] => act_traceip [0] => act_traceip ) Array ( [Tables_in_db317093416] => act_user3 [0] => act_user3 )
qu'est-ce que je fais de ça ?
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 17h14   #15
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
c'est les résultats de ta requete t'en fait ce que tu veux
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 17h48   #16
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
Ce qui est bizarre, c'est que ça ne correspond pas du tout au nom de mes tables, et que ça n'en retourne que 14, alors qu'avec mysql_query, il y en a 18...
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 21h26   #17
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
J'ai remplacé
Code :
foreach ($res as $ligne)
par
Code :
while ($ligne = $res->fetch() )
et le résultat est exactement le même : si je m'intéresse aux requêtes préparées, est-ce que ça risque d'être mieux ?
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 27/05/2011, 09h41   #18
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
Citation:
Envoyé par laurentSc Voir le message
J'ai remplacé
Code :
foreach ($res as $ligne)
par
Code :
while ($ligne = $res->fetch() )
et le résultat est exactement le même : si je m'intéresse aux requêtes préparées, est-ce que ça risque d'être mieux ?
ça ne changera rien
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2011, 10h51   #19
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 802
Points : 1 515
Points : 1 515
Citation:
Envoyé par laurentSc Voir le message
Ce qui est bizarre, c'est que ça ne correspond pas du tout au nom de mes tables, et que ça n'en retourne que 14, alors qu'avec mysql_query, il y en a 18...
Tu es sûr d'exécuter ta requête sur la bonne base de données ?
__________________
Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2011, 09h44   #20
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
Citation:
Tu es sûr d'exécuter ta requête sur la bonne base de données ?
Malheureusement, oui...
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h11.


 
 
 
 
Partenaires

Hébergement Web