PDO (PHP Data Object) est une nouveauté dans PHP 5. Lorsque PHP 6 est sur le point de sortir, PHP 6 utilise uniquement PDO pour traiter la base de données par défaut et déplacera toutes les extensions de base de données vers PECL, donc la valeur par défaut n'est plus .php_mysql.dll et autres, que dois-je faire ? Nous ne pouvons que suivre le rythme, alors j'ai essayé PDO. (Cet article n'est qu'un article d'entrée de gamme, les experts peuvent l'ignorer, haha)
[Qu'est-ce que PDO]
PDO est une nouvelle fonctionnalité majeure ajoutée à PHP 5, car avant PHP 5, php4/php3 avait un tas d'extensions de base de données avec lesquelles communiquer. base de données Connexion et traitement, php_mysql.dll, php_pgsql.dll, php_mssql.dll, php_sqlite.dll et autres extensions pour connecter MySQL, PostgreSQL, MS SQL Server, SQLite, de même, il faut utiliser ADOdb, PEAR::DB, PHPlib : :Les classes abstraites de bases de données telles que DB sont extrêmement lourdes et inefficaces pour nous aider. Après tout, comment l'efficacité du code PHP peut-elle être si élevée que nous pouvons l'écrire directement en C/C++ ? Par conséquent, l'émergence de l'AOP est inévitable. Tout le monde devrait accepter son utilisation avec une attitude d'apprentissage sereine. Peut-être constaterez-vous que cela peut vous épargner beaucoup d'efforts.
[Installation de PDO]
J'utilise Windows XP SP2, donc l'ensemble du processus est effectué sous Windows. Quant à Linux/FreeBSD et d'autres plates-formes, veuillez trouver les informations et configurer l'installation par vous-même.
Le mien est PHP 5.1.4, qui est déjà fourni avec l'extension php_pdo.dll, mais il nécessite une petite configuration avant de pouvoir être utilisé.
Ouvrez c:windowsphp.ini, qui est mon fichier de configuration PHP, et recherchez la ligne suivante :
extension_dir
C'est le répertoire où se trouve notre extension PHP 5 : C:php5ext, alors je le ferai. Remplacez cette ligne par :
extension_dir = "C:/php5/ext"
puis recherchez-la sous php.ini :
;;;;;;;;;;;;;;;;;;;;;;;;;
; Extensions dynamiques ;
;;;;;;;;;;;;;;;;;;;;;;;
Il y a un tas de choses similaires à ;extension=php_mbstring.dll ci-dessous. Voici la configuration pour le chargement de l'extension PHP. ajoutez-le à la fin. Notre extension PDO :
extension=php_pdo.dll.
extension=php_pdo_mysql.dll
extension=php_pdo_pgsql.dll
extension=php_pdo_sqlite.dll
extension=php_pdo_mssql.dll
extension=php_pdo_odbc.dll
extension=php_pdo_firebird.dll
;extension=php_pdo_oci8.dll
Divers pilotes PDO peuvent être ajoutés, mais le php_pdo_oci8.dll suivant, parce que je n'ai pas installé la base de données Oralce, ne l'a pas, j'utilise donc un point-virgule pour le commenter. Ensuite redémarrez notre serveur web, IIS/Apache, le mien est IIS, hé, vous me méprisez, sous Windows, c'est facile.
Après redémarrage, écrivez un fichier phpinfo.php dans le répertoire document de notre serveur web et ajoutez ceux-ci :
<?
phpinfo();
?>
Ensuite ouvrez notre joli navigateur : IE/FireFox, le mien est FireFox 2.0, je viens de le télécharger, il est génial, je n'ai pas peur des logiciels malveillants, haha.
Entrez dans le navigateur : http://localhost/phpinfo.php . Si votre chemin vers cette page est incohérent, veuillez le saisir vous-même.
Dans le contenu de sortie, si vous pouvez le voir avec succès :
PDO
Prise en charge PDO activée
Pilotes PDO mysql, pgsql, sqlite, mssql, odbc, firebird.
Il y a diverses instructions de pilote à l'arrière : PDO_Firebird, pdo_mssql, pdo_mysql, PDO_ODBC, pdo_pgsql, pdo_sqlite.
Ensuite, félicitations pour votre installation réussie, sinon veuillez vérifier attentivement les étapes ci-dessus. .
[Test rapide]
J'utilise MySQL 4.0.26, mais je recommande personnellement à tout le monde d'utiliser MySQL 4.1.x ou MySQL 5.0.x, car ces versions contiennent beaucoup de choses intéressantes qui méritent d'être apprises. Ce à quoi notre PDO doit se connecter est mon MySQL 4.0. Si vous n'avez pas installé MySQL, veuillez l'installer vous-même. Nous avons créé MySQL et ajouté la table foo à la bibliothèque de tests, comprenant quatre champs tels que l'identifiant, le nom, le sexe et l'heure.
Nous avons commencé à construire la première application PDO et créé un fichier pdo.php dans le répertoire des documents Web :
<?php
$dsn = "mysql:host=localhost;dbname=test";
$db = nouveau PDO($dsn, 'root', '');
$count = $db->exec("INSERT INTO foo SET name = 'heiyeluren',gender='male',time=NOW()");
echo $compte;
$db = nul ;
?>
Je ne comprends pas ce que cela signifie, expliquons-le lentement. Cette ligne :
$dsn = "mysql:host=localhost;dbname=test" ;
sert à construire notre DSN (source de données). Regardez les informations à l'intérieur : le type de base de données est mysql, l'adresse de l'hôte est localhost et le nom de la base de données. est un test. Juste quelques informations. Les méthodes de construction des sources de données des différentes bases de données sont différentes.
$db = new PDO($dsn, 'root', '');
Initialiser un objet PDO est notre source de données, le deuxième est l'utilisateur qui se connecte au serveur de base de données et le troisième paramètre est le mot de passe. . Nous ne pouvons pas garantir que la connexion réussit. Nous parlerons des exceptions plus tard. Nous supposons ici que la connexion est réussie.
$count = $db->exec("INSERT INTO foo SET name = 'heiyeluren',gender='male',time=NOW()");
echo $count;
appelle notre objet PDO connecté avec succès pour exécuter une requête. Cette requête est une opération pour insérer un enregistrement. L'utilisation de la méthode PDO::exec() renverra un résultat qui affecte l'enregistrement, nous générons donc ce résultat. Enfin, vous devez encore terminer la ressource objet :
$db = null;
Par défaut, ce n'est pas une connexion longue. Si vous avez besoin d'une connexion longue à la base de données, vous devez ajouter un dernier paramètre : array(PDO::ATTR_PERSISTENT. => true). Cela devient comme ceci :
$db = new PDO( $dsn, 'root', '', array(PDO::ATTR_PERSISTENT => true));
C'est une opération si simple. du précédent, mais il est quelque peu similaire à ADOdb.
[Continuer à apprendre]
Si nous voulons extraire des données, nous devons utiliser la fonction d'acquisition de données. ($db utilisé ci-dessous sont tous les objets connectés ci-dessus)
<?php
foreach($db->query("SELECT * FROM foo")){
print_r($ligne);
}
?>
On peut également utiliser cette méthode d'acquisition :
<?php
$rs = $db->query("SELECT * FROM foo");
while($row = $rs->fetch()){
print_r($ligne);
}
?>
Si vous souhaitez récupérer toutes les données dans le tableau en même temps, vous pouvez faire ceci :
<?php
$rs = $db->query("SELECT * FROM foo");
$result_arr = $rs->fetchAll();
print_r($result_arr);
?>
Tableau
([0] => Tableau(
[identifiant] => 1
[0] => 1
[nom] => heiyeluren
[1] =>heiyeluren
[sexe] =>Homme[2] =>Homme[heure] =>2006-10-28 23:14:23
[3] => 2006-10-28 23:14:23
)
}
Regardons les enregistrements à l'intérieur. Il y a à la fois des index numériques et des index associés, ce qui est un gaspillage de ressources. Nous n'avons besoin que de l'index associé :
<?php.
$db->setAttribute(PDO::ATTR_CASE, PDO::CASE_UPPER);
$rs = $db->query("SELECT * FROM foo");
$rs->setFetchMode(PDO::FETCH_ASSOC);
$result_arr = $rs->fetchAll();
print_r($result_arr);
?>
Regardez le code ci-dessus, la méthode setAttribute() consiste à définir certains attributs. Les principaux attributs sont : PDO::ATTR_CASE, PDO::ATTR_ERRMODE, etc. Ce que nous devons définir ici est PDO::ATTR_CASE, c'est-à-dire. , nous utilisons l'index associé pour obtenir des données Lors du paramétrage, il existe plusieurs options pour savoir si l'index associé est en majuscule ou en minuscule :
PDO::CASE_LOWER -- Forcer le nom de la colonne à être en minuscules PDO::CASE_NATURAL -- Le nom de la colonne sera de la manière originale PDO::CASE_UPPER -- Force le nom de la colonne à être en majuscules
Nous utilisons la méthode setFetchMode pour définir le type de valeur de retour pour obtenir le jeu de résultats. Les mêmes types sont :
PDO::FETCH_ASSOC -- formulaire de tableau associatif PDO. ::FETCH_NUM -- forme de tableau d'index numérique PDO::FETCH_BOTH -- les deux formes de tableau Oui, c'est le PDO::FETCH_OBJ par défaut - sous la forme d'un objet, similaire au précédent mysql_fetch_object()
Bien sûr, en général, nous
.utilisez PDO::FETCH_ASSOC. Ce qu'il faut utiliser dépend spécifiquement de vos propres besoins. Autres acquisitions Type de manuel de référence.
En plus de la méthode ci-dessus pour obtenir des données, il existe également cette méthode :
<?php
$rs = $db->prepare("SELECT * FROM foo");
$rs->exécuter();
while($row = $rs->fetch()){
print_r($ligne);
}
?>
En fait, c’est presque pareil. Si vous souhaitez obtenir les résultats d'un champ dans un enregistrement spécifié, vous pouvez utiliser PDOStatement::fetchColumn() :
<?php
$rs = $db->query("SELECT COUNT(*) FROM foo");
$col = $rs->fetchColumn();
echo $col;
?>
Généralement, fetchColumn() est utilisé pour effectuer des statistiques de comptage ou certains enregistrements qui ne nécessitent qu'un seul champ sont faciles à utiliser.
Pour résumer brièvement les opérations ci-dessus :
les opérations de requête sont principalement PDO::query(), PDO::exec() et PDO::prepare(). PDO::query() est principalement utilisé pour les opérations qui renvoient des résultats enregistrés, en particulier les opérations SELECT. PDO::exec() est principalement utilisé pour les opérations qui ne renvoient pas de jeu de résultats, telles que INSERT, UPDATE, DELETE et d'autres opérations. Il renvoie Le résultat est le nombre de colonnes affectées par l'opération en cours. PDO::prepare() est principalement une opération de prétraitement. Vous devez utiliser $rs->execute() pour exécuter l'instruction SQL lors du prétraitement. Cette méthode peut lier des paramètres et est relativement puissante. Elle ne peut pas être expliquée simplement dans cet article. . Tout le monde Vous pouvez vous référer aux manuels et autres documentations. Les principales opérations pour obtenir le jeu de résultats sont : PDOStatement::fetchColumn(), PDOStatement::fetch(), PDOStatement::fetchALL(). PDOStatement::fetchColumn() est un champ du premier enregistrement spécifié dans le résultat de la récupération. La valeur par défaut est le premier champ. PDOStatement::fetch() est utilisé pour obtenir un enregistrement et PDOStatement::fetchAll() est utilisé pour obtenir tous les jeux d'enregistrements en un seul. Pour obtenir les résultats, vous pouvez définir le type du jeu de résultats requis via PDOStatement::setFetchMode. .
Il existe également deux opérations environnantes, l'une est PDO::lastInsertId() et PDOStatement::rowCount(). PDO::lastInsertId() renvoie la dernière opération d'insertion et le type de colonne de clé primaire est le dernier ID d'auto-incrémentation. PDOStatement::rowCount() est principalement utilisé pour le jeu de résultats affecté par les opérations DELETE, INSERT et UPDATE de PDO::query() et PDO::prepare(), et n'est pas valide pour la méthode PDO::exec() et opérations SELECT.
[Gestion des erreurs]
Que devez-vous faire si vous rencontrez une erreur dans le programme ? Nous décrivons ici les informations sur les erreurs et la gestion des exceptions de la classe PDO.
1. Approche orientée objet.
Voyons d'abord comment gérer les erreurs de connexion, etc., et utilisons l'approche orientée objet pour les gérer :
<?php
essayer {
$db = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
$db = nul ;
} catch (PDOException $e) {
print "Erreur : " . $e->getMessage() .
mourir();
}
?>
Nous utilisons ici la fonctionnalité de gestion des exceptions orientée objet de PHP 5. S'il y a une exception, nous l'initialiserons en appelant PDOException pour initialiser une classe d'exception.
Structure des attributs de la classe d'exception PDOException :
<?php
la classe PDOException étend l'exception
{
public $errorInfo = null; // Pour obtenir des informations sur les erreurs, vous pouvez appeler PDO::errorInfo() ou PDOStatement::errorInfo() pour accéder à protected $message; // Pour obtenir des informations sur les exceptions, vous pouvez essayer Exception::getMessage() pour access protected $code ; // Code d'erreur d'état SQL, accessible à l'aide de Exception::getCode()
}
?>
Cette classe de gestion des exceptions est intégrée à la classe de gestion des exceptions intégrée de PHP 5. Jetons un bref coup d'œil à la structure de la classe de gestion des exceptions intégrée de PHP 5 :
<?php
classeException
{
//Propriété protégée $message = 'Exception inconnue'; //Message d'exception protégé $code = 0; //Code d'exception défini par l'utilisateur protected $file; //Le nom du fichier où l'exception s'est produite protected $line; où l'exception s'est produite Numéro de ligne
// Méthode final function getMessage(); // Renvoie les informations sur l'exception final function getCode(); // Renvoie le code d'exception final function getFile(); // Renvoie le nom du fichier où l'exception s'est produite final function getLine (); // Renvoie le numéro de la ligne de code où l'exception s'est produite final function getTrace(); // tableau backtrace() fonction finale getTraceAsString(); // informations getTrace() formatées en chaîne
}
?>
En conséquence, getFile() et getLine() peuvent être appelés de manière appropriée dans le code pour localiser les erreurs et rendre le débogage plus pratique.
2. Utilisez l'approche orientée processus
pour examiner d'abord le code :
<?
$db = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
$rs = $db->query("SELECT aa,bb,cc FROM foo");
si ($db->errorCode() != '00000'){
print_r($db->errorInfo());
sortie;
}
$arr = $rs->fetchAll();
print_r($arr);
$db = nul ;
?>
Les objets PDO et PDOStatement ont les méthodes errorCode() et errorInfo() S'il n'y a pas d'erreur, errorCode() renvoie : 00000, sinon certains codes d'erreur seront renvoyés. errorInfo() renvoie un tableau, comprenant les codes d'erreur définis par les codes d'erreur PHP et MySQL et les informations d'erreur. La structure du tableau est la suivante :
Tableau.
(
[0] => 42S22
[1] => 1054
[2] => Colonne inconnue 'aaa' dans 'liste de champs'
)
Après l'exécution de chaque requête, le résultat de errorCode() est le dernier, nous pouvons donc facilement contrôler nous-mêmes l'affichage du message d'erreur.
[Résumé simple]
D'après l'utilisation ci-dessus, nous pouvons voir que PDO est en effet puissant. Il y a aussi d'autres choses que je n'ai pas mentionnées, telles que les paramètres de liaison, le prétraitement, les procédures stockées, le traitement des transactions et d'autres fonctions. En outre, il existe différentes structures DSN d'expansion des données. La base de données Oracle elle-même comporte de nombreux éléments particuliers qui nécessitent une étude et une compréhension approfondies. Cet article ne décrit que brièvement quelques connaissances introductives, qui peuvent être considérées comme une simple compréhension de PDO.