[Recommandations d'apprentissage associées : programmation php (vidéo)]
J'ai brièvement présenté comment installer MySQL localement et interagir avec le serveur MySQL via la ligne de commande et le logiciel client GUI.
Vous pouvez interagir avec MySQL via des commandes sur la ligne de commande, et vous pouvez interagir avec MySQL via une interface graphique sur le logiciel client Alors, comment établir une connexion et une interaction avec MySQL dans un programme PHP ? En fait, nous pouvons considérer l'application PHP comme le client du serveur MySQL, puis interagir avec le serveur MySQL via l'API fournie par le package d'extension PHP encapsulé, tout comme nous le faisons dans la ligne de commande et le logiciel client, mais maintenant ceci l'interaction passe d'une opération manuelle à une opération complétée par l'écriture du code PHP correspondant.
PHP fournit officiellement de nombreuses extensions pour interagir avec le serveur MySQL, du premier mysql à la version améliorée ultérieure de mysqli (plus sécurisée), ce sont toutes des fonctions PHP Packages d'extension à l'ère de la programmation. De manière générale, les environnements de développement intégrés PHP locaux seront livrés avec des mysqli
extensions :
Utilisons un exemple simple pour montrer comment passer Extension pour interagir avec le serveur MySQL. mysqli
Exemple de code
Créez un nouveau sous-répertoire sous le répertoire php_learning
, puis ajoutez un mysql
sous-répertoire vers le sous-répertoire Créez un nouveau fichier mysqli.php
et écrivez un code pour établir une connexion à la base de données et une requête via l'API d'extension mysqli
:
<?php $host = '127.0.0.1'; // MySQL 服务器主机地址 $port = 3306; // MySQL 服务器进程端口号 $user = 'root'; // 用户名 $password = 'root'; // 密码 $dbname = 'test'; // 使用的数据库名称 // 通过 mysqli 扩展建立与 mysql 服务器的连接 $conn = mysqli_connect($host, $user, $password, $dbname, $port); // 在连接实例上进行查询 $sql = 'SELECT * FROM `post`'; $res = mysqli_query($conn, $sql); // 获取所有结果 $rows = mysqli_fetch_all($res); var_dump($rows); // 释放资源 mysqli_free_result($res); // 关闭连接 mysqli_close($conn);
Comme vous pouvez le voir, la connexion à la base de données MySQL peut être établi via la fonction mysqli_connect. Nous transmettons 5 paramètres, qui sont l'hôte de la base de données, le nom d'utilisateur, le mot de passe, le nom de la base de données et le numéro de port. Une fois la connexion établie avec succès, vous pouvez conserver cette instance de connexion et exécuter des requêtes sur la base de données via le. Fonction mysqli_query.Nous utilisons l'instruction SQL comme deuxième paramètre.Transmettez-le, le résultat de retour de cette fonction est une instance de jeu de résultats de requête.Après avoir obtenu cette instance, vous pouvez obtenir les données de résultat via la série de fonctions mysqli_fetch_*
.
Ici, nous obtenons tous les résultats de la requête via la fonction mysqli_fetch_all
et démarrons le serveur HTTP intégré PHP via php -S localhost:9000
:
peut être transmis dans le navigateur http://localhost:9000/mysql/mysqli.php
Les résultats de la requête imprimés sont :
Optimiser l'effet de rendu
À ce moment, le la lisibilité du style de page est très mauvaise. Avant d'imprimer le résultat de sortie dans le code source, insérez une section de echo '<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">'</pre><div class="contentsignin">Copier après la connexion</div></div>
code pour optimiser l'effet de rendu :
// 获取所有结果 $rows = mysqli_fetch_all($res); echo '<pre class="brush:php;toolbar:false">'; var_dump($rows);
Actualisez la page du navigateur et vous pouvez voir ce qui suit. effet d'impression :
Recommandations d'apprentissage associées : Tutoriel MySQL(vidéo)
Définir le caractère encodage
Il y a un petit problème ici, c'est-à-dire que les émoticônes Emoji ne s'affichent pas normalement et sont tronquées. Nous pouvons définir l'encodage des caractères sur utf8mb4
via la fonction mysqli_set_charset, tout comme en définissant la valeur par défaut. encodage des caractères dans la ligne de commande :
// 通过 mysqli 扩展建立与 mysql 服务器的连接 $conn = mysqli_connect($host, $user, $password, $dbname, $port); // 设置字符编码为 utf8mb4 mysqli_set_charset($conn, 'utf8mb4'); ... // 获取所有结果 $rows = mysqli_fetch_all($res); echo '<pre class="brush:php;toolbar:false">'; var_dump($rows[2]);
et vous pouvez le voir en actualisant la page. C'est l'heure des expressions Emoji :
Retour associatif. array
Le résultat actuel renvoyé est un tableau d'index, et le champ correspondant à la valeur ne peut pas être connu, pour obtenir le mappage complet des noms de champ et des valeurs de champ, vous pouvez définir la valeur du deuxième paramètre transmis dans la fonction mysqli_fetch_all
à MYSQLI_ASSOC
(la valeur par défaut est MYSQLI_NUM
) :
// 获取所有结果(关联数组) $rows = mysqli_fetch_all($res, MYSQLI_ASSOC); echo '<pre class="brush:php;toolbar:false">'; var_dump($rows[2]);
Renvoyer un seul résultat
Tous les résultats renvoyés ci-dessus sont plusieurs résultats (même si un seul enregistrement est renvoyé, le résultat renvoyé est un tableau multidimensionnel. Parfois, nous ne pouvons utiliser que si vous souhaitez renvoyer le premier résultat de l'ensemble de résultats). la fonction mysqli_fetch_row :
// 在连接实例上进行查询 $sql = 'SELECT * FROM `post` WHERE id = 1'; $res = mysqli_query($conn, $sql); // 获取所有结果 /* $rows = mysqli_fetch_all($res, MYSQLI_ASSOC); echo '<pre class="brush:php;toolbar:false">'; var_dump($rows);*/ // 获取单条结果 $row = mysqli_fetch_row($res); echo '<pre class="brush:php;toolbar:false">'; var_dump($row);
Actualisez la page de test du navigateur et imprimez les résultats comme suit :
可以看到返回结果已经是一个一维数组了,只包含一条记录。如果想要返回关联数组结果,需要通过一个新的函数 mysqli_fetch_assoc 函数来实现:
// 获取单条结果 // $row = mysqli_fetch_row($res); $row = mysqli_fetch_assoc($res); echo '<pre class="brush:php;toolbar:false">'; var_dump($row);
对应的打印结果如下:
将返回结果映射到指定对象
除了返回数组格式结果外,还可以借助 mysqli_fetch_object 函数将数据库查询结果映射到指定对象实例并返回:
class Post { public $id; public $title; public $content; public $created_at; public function __toString() { return '[#' . $this->id . ']' . $this->title; } } // 将数据库返回结果映射到指定个对象 $post = mysqli_fetch_object($res, Post::class); echo $post;
对应的打印结果如下,说明对象映射成功(调用了对象的魔术方法 __toString
打印输出该对象):
在上述数据库查询操作中,我们直接将原生 SQL 语句传递给 MySQL 数据库执行,如果 SQL 语句中包含了用户传递的参数,则存在 SQL 注入风险,要避免 SQL 注入攻击,在 mysqli
扩展中,可以通过构建预处理语句的方式实现:
下面,我们以插入记录到数据库为例,演示如何通过预处理语句的方式与数据库交互,提高代码安全性。
我们首先基于预处理语句编写插入记录到数据库的代码如下(基于上面的 $conn
连接实例):
// 插入记录到数据库 $sql = 'INSERT INTO `post` (title, content, created_at) VALUES (?, ?, ?)'; // 构建预处理 SQL 语句 $stmt = mysqli_prepare($conn, $sql); // 绑定参数值 $title = '这是一篇测试文章'; $content = '测试文章啊啊啊
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!