Je sais que j'ai besoin de déclarations préparées parce que je fais plus d'un appel à ma base de données lors d'un script. P>
J'aimerais obtenir des exemples concrets sur le phrase suivante p>
Regardez les variables de typée, de validation et de désinfectionnement et de l'utilisation de PDO avec des déclarations préparées. P> blockQuote>
Je sais ce qu'il veut dire en validant et en désinfectant les variables. Cependant, je ne suis pas totalement sûr des déclarations préparées. Comment préparer des déclarations? Par filtres, c'est-à-dire en désinfectant? Ou par une couche de PDO? Quelle est la définition du calque? P>
Que signifient les déclarations préparées dans la déclaration? strong> s'il vous plaît, utilisez des exemples concrets. p>
4 Réponses :
Comment préparer des déclarations: strong> Vous définissez une requête une fois et peut l'appeler aussi souvent que vous le souhaitez avec différentes valeurs. (par exemple, dans une boucle) p> voir: http://us2.php.net/manual/fr/function.pg-execute.php p> p>
Qu'est-ce que les déclarations préparées signifient dans la déclaration? p>
du Documentation : P>
Cette fonctionnalité permet aux commandes qui seront utilisées à plusieurs reprises pour être analysées et planifiées une seule fois, plutôt que chaque fois qu'elles sont exécutées. P>
voir
pg_prepare p> Exemple de la page liée ci-dessus: p>
xxx pré> Le La documentation MySQL pour les déclarations préparées répond bien à la suivante Questions: P>
- Pourquoi utiliser des déclarations préparées? LI>
- Quand devriez-vous utiliser préparé déclarations? li> ul> blockQuote>
Vos exemples ont-ils la même fonctionnalité que les robots? Ils sont beaucoup plus clairs pour moi que ceux du robot. Il semble utiliser beaucoup de tableaux qui les rendent difficiles à lire pour moi.
@ Masi - Les exemples que j'ai fournis proviennent de la page DOC PG_PREPARE. Ils sont plus faciles à suivre, mais je dirais que les exemples de @Glass Robot sont plus réels du monde (par exemple, des marqueurs nommés). Je vous suggère d'obtenir vos mains sales dès que possible. Il n'y a pas d'exemple pour les gouverner tous ».
Votre réponse n'utilise pas PDO. Cela me suggère que vous pouvez utiliser des déclarations préparées sans PDO. PDO semble offrir une indépendance de base de données uniquement.
Il semble que pg_query = pg_prepare + pg_pg_execution - possibilité_to_run_a_list_vars_to_a_statement code>.
S'il vous plaît, voyez ma réponse à votre réponse ci-dessus ou sur Stackoverflow.com/Questtions/1247373/...
Cela signifie qu'il vous aidera à prévenir les attaques d'injection SQL en éliminant la nécessité de citer manuellement les paramètres.
Au lieu de placer une variable dans le SQL, vous utilisez un marqueur nommé ou d'interrogation pour lequel des valeurs réelles seront substituées lorsque l'instruction est exécutée. P>
Définition de PDO du manuel PHP:
"L'extension des objets de données PHP (PDO) définit une interface légère et cohérente pour accéder à des bases de données en php." P>
Voir le manuel PHP sur PDO et PDO :: Préparez .
Un exemple d'une instruction préparée avec des marqueurs nommés: p> un exemple d'une déclaration préparée avec marqueurs d'interrogation: p> <?php
$pdo = new PDO('pgsql:dbname=example;user=me;password=pass;host=localhost;port=5432');
$sql = "SELECT username, password
FROM users
WHERE username = ?
AND password = ?";
$sth = $pdo->prepare($sql);
$sth->execute(array($_POST['username'], $_POST['password']));
$result = $sth->fetchAll();
Vos commandes semblent sélectionner les colonnes Nom d'utilisateur et mot de passe à partir des utilisateurs de la table lorsque, par exemple, nom d'utilisateur = A et mot de passe = a. Cela me suggère que le code n'est pas pratique dans la vie réelle car il n'a aucun sens dans la sélection des deux noms de colonne lorsque vous les connaissez déjà. Toutefois, si vous sélectionnez la troisième colonne en fonction des deux, alors votre chemin semble fonctionner. Il semble que les entrées de l'utilisateur soient traitées de manière à ce que l'échec / accident dans l'exécution des requêtes avec l'entrée de l'utilisateur ne modifie pas les données d'origine, donc aucune injection SQL: par exemple, arrêtez-vous si elle échoue à la préparation ...
ceci p> semble être identique à ce p> Conclusion: strong> L'utilisation de
pg_prepare code> et
pg_execute code> fait beaucoup plus efficacement PHP, car vous n'avez pas besoin de prendre en compte désinfectionner. Il vous aide également à utiliser PDO. P> P>