À partir de cet article, nous découvrons l'extension MySQLi. On peut dire que l'extension MySQL (originale) est le tuteur d'introduction permettant à beaucoup d'entre nous de se connecter à la base de données lorsque nous commençons à apprendre PHP. Désormais, si vous souhaitez utiliser du code procédural pour faire fonctionner la base de données, vous ne pouvez utiliser que l'extension mysqli.
Notre étude de PDO est terminée. À partir de cet article, nous continuons à apprendre une autre extension MySQL, qui est l'extension principale de MySQLi en plus de PDO. On peut dire que son ancêtre, l’extension MySQL (originale), était le guide incontournable pour se connecter aux bases de données lorsque beaucoup d’entre nous ont commencé à apprendre PHP. Cependant, à mesure que les temps changent, l'extension MySQL (originale) a été complètement abandonnée dans PHP7. Désormais, si vous souhaitez utiliser du code procédural pour faire fonctionner la base de données, vous ne pouvez utiliser que l'extension mysqli. Bien entendu, l'extension mysqli prend également en charge l'écriture orientée objet.
L'extension MySQLi nous permet d'accéder aux fonctions fournies par les bases de données MySQL4.1 et supérieures. Il est spécifiquement destiné à la base de données MySQL, contrairement à PDO qui peut se connecter à différentes bases de données via différents DNS.
Tout d'abord, passons en revue la première extension MySQL.
Uniquement pour les procédures
Ne prend pas en charge les procédures stockées, l'exécution de plusieurs instructions, les instructions préparées
PHP7 a été supprimé et n'est pas du tout pris en charge
Puis PDO
Prend uniquement en charge l'utilisation orientée objet
Peut se connecter à une variété de bases de données, le changement de base de données entraînera moins de changements et vous n'aurez peut-être même pas besoin de modifier le code
Prend en charge les procédures stockées, l'exécution de plusieurs instructions , et les déclarations préparées
Le dernier est MySQLi.
Prend en charge l'écriture orientée objet et orientée processus
Prend en charge uniquement la base de données MySQL
Procédures stockées prises en charge, exécution de plusieurs instructions, instructions préparées
Suite aux mises à jour des versions de PHP et MySQL, davantage de fonctionnalités avancées de MySQL peuvent être prises en charge plus rapidement
À en juger par ces trois caractéristiques, l'extension MySQL (originale) n'est définitivement pas recommandée Même pour les anciens projets, tant qu'il s'agit d'une version PHP prenant en charge PDO ou MySQLi, vous devriez envisager de convertir la connexion à la base de données vers celle-ci. de deux manières. Si vous êtes encore en train d'apprendre à utiliser les extensions MySQL (originales) dans un environnement PHP5, vous pouvez les déposer.
Quant au choix entre PDO et MySQLi, c'est une question d'avis. En fait, il n'y a pas beaucoup de différence entre eux, mais les frameworks modernes à grande échelle encapsuleront essentiellement PDO comme connexion à la base de données par défaut. Après tout, sa portabilité peut faciliter la connexion de ces frameworks généraux à différentes bases de données. Dans certains petits frameworks ou projets, MySQLi est encore visible.
Bien sûr, niche ne veut pas dire mauvais. Tout comme dans le développement quotidien, nous utilisons rarement d'autres bases de données dans l'environnement PHP, nous pouvons donc utiliser complètement un ensemble de MySQLi pour fonctionner dans nos propres petits projets. est plus pratique et plus rapide. Dans le même temps, si l'ancien projet souhaite passer à la version PHP7, s'il utilisait auparavant MySQL (original) pour se connecter à la base de données, il peut également remplacer rapidement le code MySQL (original) par MySQLi dans tous les aspects.
L'extension MySQLi est publiée avec le code source PHP Nous ajoutons simplement --with-mysqli lors de la compilation de PHP. Le pilote de base de données par défaut utilise désormais mysqlnd et libmysql a été pratiquement éliminé. Par conséquent, il n’est pas nécessaire d’ajouter d’autres paramètres lors de la compilation, il suffit de compiler directement.
Vous devez faire attention lors de la connexion à MySQL8, car le serveur MySQL8 utilisera caching_sha2_password comme cryptage de mot de passe par défaut. MySQLi dans les versions antérieures à PHP7.2.4 utilisera mysql_native_password pour crypter le mot de passe de connexion, ce qui entraînera l'impossibilité de se connecter à la base de données. Vous pouvez modifier le fichier my.cnf et définir default_authentication_plugin=mysql_native_password pour permettre à MySQL8 d'utiliser également mysql_native_password pour crypter les mots de passe des utilisateurs.
Comme mentionné ci-dessus, MySQLi prend en charge deux méthodes d'écriture, à savoir orientée objet et orientée procédure. Une compréhension simple est qu'une façon d'écrire est l'extension MySQL (originale) et que l'autre façon d'écrire est similaire à PDO. Examinons d'abord l'écriture orientée processus.
$mysqli = mysqli_connect("localhost", "root", "", "blog_test"); $res = mysqli_query($mysqli, "SELECT * FROM zyblog_test_user"); $row = mysqli_fetch_assoc($res); print_r($row);
Ne pensez-vous pas qu'il est vraiment pratique de transplanter le code d'extension MySQL (original) ? Changez simplement tous les noms de méthodes en mysqli_xxx.
L'orienté objet, c'est un peu comme le PDO. Nous devons d’abord obtenir une classe de handles de connexion, puis exploiter cette classe.
$mysqli = new mysqli("localhost", "root", "", "blog_test"); $res = $mysqli->query("SELECT * FROM zyblog_test_user"); $row = $res->fetch_assoc(); print_r($row);
另外,这两种方式还可以混合使用,不过并不推荐。混合起来使用的话很容易让看代码的人晕头转向。所以,最好还是在一个项目中就坚持使用一种方式。
$mysqli = new mysqli("localhost", "root", "", "blog_test"); $res = mysqli_query($mysqli, "SELECT * FROM zyblog_test_user"); $row = $res->fetch_assoc(); print_r($row);
在这段代码中,我们实例化了一个 mysqli 对象,然后使用面向过程的 mysqli_query() 函数来执行语句,接着又使用面向对象的方式来获取结果集。是不是很乱?但是它是可以正常运行的。
从上面的内容中可以看出,PDO 的特点是支持多种不同类型的数据库,就像 Java 中的 JDBC 一样。而 MySQLi 虽然只支持 MySQL 数据库,但它却可以同时支持面向对象和面向过程两种写法。是我们针对老项目代码进行升级优化的好帮手。同时,它还是现在入门 PHP 学习相关数据库操作的首选。在接下来的文章中,我们将默认只使用 面向对象 式的写法来继续学习 MySQLi 扩展相关的知识。
测试代码:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202009/source/4.PHP中的MySQLi扩展学习(一)MySQLi介绍.php
推荐学习:php视频教程
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!