0x01: Testez si l'APD est installé avec succès
Exécutez le code suivant. Si le paramètre est faux, cela signifie que l'APD a été installé. Si l'objet n'existe pas, modifiez le fichier de configuration PHP PHP.ini et annulez les commentaires dans le PHP_PDO_YORSSSSQLSERVERHERE.EXTIS.
La copie de code est la suivante:
$ test = new PDO ();
0x02: Connectez-vous à la base de données
Exécutez le serveur Apache et confirmez que le serveur a été exécuté et que l'installation de l'APD est réussie. Connectons ensuite à la base de données.
La copie de code est la suivante:
$ dsn = 'mysql: dbname = démo; host = localHost; port = 3306';
$ username = 'root';
$ password = 'password_here';
essayer {
$ db = new PDO ($ dsn, $ username, $ mot de passe);
} catch (pDoException $ e) {
Die ('ne pouvait pas se connecter à la base de données:
'. $ e);
}
0x03: requête de base
L'utilisation de Query et Exec dans PDO rend les bases de données de requête très simples. Si vous souhaitez obtenir le nombre de lignes du résultat de la requête, il est très utile pour sélectionner des instructions de requête.
La copie de code est la suivante:
$ instruction = <<< SQL
SÉLECTIONNER *
Des `` aliments ''
Où «sain» = 0
SQL;
$ aliments = $ db-> requête (déclaration $);
Si la requête ci-dessus est correcte, $ Foods est maintenant un objet de déclaration PDO, à partir de laquelle nous pouvons obtenir les résultats dont nous avons besoin et le nombre d'ensembles de résultats que nous avons interrogés au total.
0x04: Obtenez le nombre de lignes
Si vous utilisez la base de données MySQL, l'instruction PDO contient une méthode RowCount pour obtenir le nombre de lignes dans le jeu de résultats, comme indiqué dans le code suivant:
La copie de code est la suivante:
Echo $ aliments-> RowCount;
0x05: ensemble de résultats de traversée
La mise en scène de l'APD peut être traversée à l'aide de l'instruction de pré-propre, comme indiqué dans le code suivant:
La copie de code est la suivante:
foreach ($ aliments-> fetchall () comme $ alimentaire) {
Echo $ aliment ['nom']. '
';;
}
L'OPD prend également en charge la méthode Fetch, qui ne renvoie que le premier résultat.
0x06: échapper aux caractères spéciaux entrés par l'utilisateur
PDO fournit une méthode appelée Quote, qui permet aux caractères spéciaux d'échapper aux endroits avec des citations dans la chaîne d'entrée.
La copie de code est la suivante:
$ input = Ceci est 'a' '' assez danger 'Str'ing
Après transfert en utilisant la méthode de devis:
La copie de code est la suivante:
$ db-> devis ($ entrée): 'Ceci est /' s / 'a /' / '/' joli danger / 'rous str /' ing '
0x07: exec ()
PDO peut utiliser la méthode Exec () pour implémenter les opérations de mise à jour, de suppression et d'insertion. Après l'exécution, il renverra le nombre de lignes affectées:
La copie de code est la suivante:
$ instruction = <<< SQL
Supprimer des «aliments»
Où «sain» = 1;
SQL;
echo $ db-> exec ($ instruction);
0x08: déclaration de prétraitement
Bien que la méthode EXEC et la requête soient toujours largement utilisées et prises en charge dans PHP, le site officiel de PHP exige toujours que tout le monde utilise des instructions de prétraitement pour les remplacer. Pourquoi? Principalement parce que: c'est plus sûr. Les instructions de prétraitement n'inservent pas directement les paramètres dans les requêtes réelles, ce qui évite de nombreuses injections de SQL potentielles.
Cependant, pour une raison quelconque, l'APD n'utilise pas vraiment de prétraitement. Il simule les méthodes de prétraitement, insère des données de paramètres dans les instructions avant de passer l'instruction au SQL Server, ce qui rend certains systèmes sensibles à l'injection SQL.
Si votre serveur SQL ne prend pas vraiment en charge le prétraitement, nous pouvons facilement résoudre ce problème en passant par des paramètres pendant l'initialisation de l'APD comme suit:
La copie de code est la suivante:
$ db-> setAttribute (PDO :: att_emulate_prepares, false);
Voici notre première déclaration de prétraitement:
La copie de code est la suivante:
$ instruction = $ db-> prépare ('select * dans les aliments où' name` =? et `sain '=?');
$ statut2 = $ db-> prépare ('select * dans les aliments où' name` =: nom et `sain '=: sain)';
Comme le montre le code ci-dessus, il existe deux façons de créer des paramètres, du nom et Anonymous (ne peut pas apparaître dans une instruction en même temps). Ensuite, vous pouvez utiliser BindValue pour saisir votre entrée:
La copie de code est la suivante:
$ instruction-> bindValue (1, «gâteau»);
$ instruction-> bindValue (2, true);
$ instruction2-> bindValue (': name', 'Pie');
$ statut2-> bindvalue (': sain', false);
Notez que lorsque vous utilisez des paramètres nommés, vous devez inclure le côlon (:). PDO a également une méthode BindParam, qui peut lier les valeurs numériques par référence, c'est-à-dire qu'elle ne recherche que les valeurs numériques correspondantes lorsque l'instruction est exécutée.
La seule chose à faire maintenant est d'exécuter notre déclaration:
La copie de code est la suivante:
$ instruction-> EXECUTE ();
$ statut2-> execute ();
// Obtenez nos résultats:
$ gâteau = $ instruction-> fetch ();
$ PIE = $ instruction2-> fetch ();
Pour éviter d'utiliser uniquement des fragments de code BindValue, vous pouvez utiliser un tableau pour donner la méthode d'exécution en tant que paramètre, comme ceci:
La copie de code est la suivante:
$ instruction-> Execute (array (1 => 'gâteau', 2 => true));
$ instruction2-> Execute (array (': name' => 'Pie', ': Healthy' => false));
0x09: transactions
Une transaction consiste à exécuter un ensemble de requêtes, mais n'enregistre pas leur impact sur la base de données. L'avantage de cela est que si vous exécutez 4 instructions d'insertion interdépendantes, lorsque l'on échoue, vous pouvez reculer pour que d'autres données ne puissent pas être insérées dans la base de données, en vous garantissant que les champs interdépendants peuvent être insérés correctement. Vous devez vous assurer que le moteur de base de données que vous utilisez prend en charge les transactions.
0x10: Démarrer la transaction
Vous pouvez simplement utiliser la méthode beginTransaction () pour démarrer une transaction:
La copie de code est la suivante:
$ db-> beginTransaction ();
$ db-> intransaction (); // vrai!
Ensuite, vous pouvez continuer à exécuter votre instruction de fonctionnement de la base de données et soumettre la transaction à la fin:
La copie de code est la suivante:
$ db-> commit ();
Il existe également une méthode Rollback () similaire à MySQLI, mais elle ne fait pas de tout type (par exemple, en utilisant la table DROP dans MySQL), cette méthode n'est pas vraiment fiable, je recommande d'essayer d'éviter de compter sur cette méthode.
0x11: Autres options utiles
Il existe plusieurs options que vous pouvez envisager d'utiliser. Ceux-ci peuvent être entrés en tant que quatrième paramètre lorsque votre objet est initialisé.
La copie de code est la suivante:
$ options = array ($ option1 => $ value1, $ option [..]);
$ db = new PDO ($ dsn, $ username, $ password, $ options);
PDO :: att_default_fetch_mode
Vous pouvez choisir le type de jeu de résultats que PDO reviendra, tel que PDO :: fetch_assoc, qui vous permettra d'utiliser $ result ['Column_name'], ou PDO :: fetch_obj, qui renverra un objet anonyme afin que vous puissiez utiliser $ result-> column_name
Vous pouvez également mettre le résultat dans une classe spécifique (modèle), en définissant un mode de lecture pour chaque requête individuelle, comme ceci:
La copie de code est la suivante:
$ query = $ db-> query ('select * from' foods '');
$ aliments = $ query-> fetchall (PDO :: fetch_class, «aliments»);
APD :: att_errMode
Nous avons expliqué cela ci-dessus, mais ceux qui aiment TryCatch doivent utiliser: PDO :: errMode_Exception. Si vous souhaitez lancer un avertissement PHP pour une raison quelconque, utilisez PDO :: errmode_warning.
PDO :: att_timeout
Lorsque vous êtes inquiet à l'idée de charger le temps, vous pouvez utiliser cette propriété pour spécifier un délai d'expiration pour votre requête en quelques secondes. Notez que si l'heure à laquelle vous définissez dépasse l'heure, l'exception par défaut E_Warning sera lancée à moins que PDO :: att_errMode soit modifiée.