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 :

Dois-je passer acc.accountNo en marqueur dans mon cas ? Aidez-moi à enlever cette confusion


Sujet :

PHP & Base de données

  1. #1
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 453
    Par défaut Dois-je passer acc.accountNo en marqueur dans mon cas ? Aidez-moi à enlever cette confusion
    Bonjour.

    Comme d'habitude, je viens de modifier un vieux Code basé sur MYSQL-QUERY (obsolète). Mais encore une fois, j'ai une inquiétude qui est situé au niveau du where ac.accountNo = acc.accountNo de la Variable $statement (Ligne 5).

    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
    function viewStatements($pin,$phone){
     
    global $bdd;
     
    $statement = "Select * from Activities ac, accountDetails acc where ac.accountNo = acc.accountNo and mobile=:phone";
     
    $resultat = $bdd->prepare($statement); 
     
    $result = $resultat->execute([':phone' => $phone]);
     
    	$response = "Activities Done for the Account:"; 
     
    	while($statementObject = $result->fetchObject()){	
     
     
    $response = $response."Account Number: ".$statementObject->accountNo." |Activity Type:".$statementObject->activityType." |Amount:".$statementObject->Amt." |Activity DateTime:".$statementObject->activityDateTime;
     
     
    	return $response;
     
    	}
    }
    Aidez-moi à voir si ce code est correcte sur surtout au niveau de la Requête SELECT de la Variable $statement (Ligne 5) "where ac.accountNo = acc.accountNo".

    Au fait, je me demande, s'il faut passer le deuxième acc.accountNo en marqueur pour le redéfinir en exécution après comme je l'ai fait à ':phone' => $phone ???

    Merci de m'éclairer et de me corriger si erreur se trouve quelque part d'autre dans mon code.

  2. #2
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    ... et quel est le souci ?

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 453
    Par défaut
    Citation Envoyé par badaze Voir le message
    ... et quel est le souci ?
    Dois-je faire where ac.accountNo = ? pour l'executer avec la requête préparée comme je l'ai déjà fait avec :phone ???
    Ou pensez vous que c'est déjà bien comme ça ???

    Au fait je crains de l'injection SQL à ce niveau.

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    On passe en paramètres les variables qui viennent de l'extérieur de la requête.
    Par exemple, dans la requête SELECT * from user where id = 1, le "1" est une donnée variable qui vient de l'extérieur de la requête.

    Dans ton cas,
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    where ac.accountNo = acc.accountNo
    c'est une instruction SQL qui fait partie de la requête. Donc ce n'est pas un paramètre.

    Pour qu'il y ait une injection, il faut que quelque chose de nocif rentre dans la requête.
    En gros, il y a un risque si tu écris quelque chose du genre "SELECT * from user where id = ".$_POST['id'], parce que tu ne maitrises absolument pas ce qui arrive de ton formulaire. Mais une instruction SQL qui fait partie de la structure de la requête ne craint rien.

    Au passage, deux recommandations pour la structure de ta requête :
    Utiliser l'intruction JOIN pour faire tes requêtes, ça évite des confusions entre ce qui permet de relier les tables entre elles et les filtres proprement dits Le SQL de A à Z - le SELECT sur plusieurs tables
    Faire une liste complète des champs à récupérer dans le SELECT plutôt qu'un SELECT * : ça permet de maitriser ce que tu récupères, de ne pas récupérer 2 fois la même information (dans ton cas, accountNo est retourné 2 fois par la requête : une fois en provenance de la table Activities et une fois en provenance de la table accountDetails )
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 453
    Par défaut
    Ok. Merci Célira pour la réponse.
    Grand merci

Discussions similaires

  1. Comment se passer de 'virtual' dans mon cas
    Par abelb dans le forum Langage
    Réponses: 10
    Dernier message: 16/02/2014, 00h51
  2. LineWidth ne veut pas passer dans mon cas
    Par membreComplexe12 dans le forum MATLAB
    Réponses: 4
    Dernier message: 12/07/2012, 20h46
  3. Est ce que Acces est le bon SGBD a utiliser dans mon cas?
    Par Isabelle27 dans le forum Modélisation
    Réponses: 5
    Dernier message: 21/03/2007, 21h40
  4. Droit accès à l'écriture dans mon repertoire WWW sous Mandriva
    Par zave dans le forum Administration système
    Réponses: 3
    Dernier message: 23/04/2006, 15h08
  5. Quel type de BDD dans mon cas
    Par zoubidaman dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 10/06/2004, 18h00

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