Maison> Les sujets> phpmysql> le corps du texte

Interaction de la base de données MySQL avec l'extension PHP Mysqli

coldplay.xixi
Libérer: 2020-09-07 09:20:02
avant
2379 Les gens l'ont consulté

Interaction de la base de données MySQL avec l'extension PHP Mysqli

[Recommandations d'apprentissage associées :programmation php(vidéo)]

Introduction

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.

Extension PHP MySQLi

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 desmysqliextensions :

Interaction de la base de données MySQL avec lextension PHP Mysqli

Utilisons un exemple simple pour montrer comment passer Extension pour interagir avec le serveur MySQL.mysqli

Connexion et requête à la base de données

Exemple de code

Créez un nouveau sous-répertoire

sous le répertoirephp_learning, puis ajoutez unmysqlsous-répertoire vers le sous-répertoire Créez un nouveau fichiermysqli.phpet écrivez un code pour établir une connexion à la base de données et une requête via l'API d'extensionmysqli:


        
Copier après la connexion

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 fonctionsmysqli_fetch_*.

Ici, nous obtenons tous les résultats de la requête via la fonctionmysqli_fetch_allet démarrons le serveur HTTP intégré PHP viaphp -S localhost:9000:

Interaction de la base de données MySQL avec lextension PHP Mysqli

peut être transmis dans le navigateurhttp://localhost:9000/mysql/mysqli.phpLes résultats de la requête imprimés sont :

Interaction de la base de données MySQL avec lextension PHP Mysqli

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 deecho '

'
Copier après la connexion
code pour optimiser l'effet de rendu :

// 获取所有结果 $rows = mysqli_fetch_all($res); echo '
'; var_dump($rows);
Copier après la connexion

Actualisez la page du navigateur et vous pouvez voir ce qui suit. effet d'impression :

Interaction de la base de données MySQL avec lextension PHP Mysqli

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 surutf8mb4via 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 '
'; var_dump($rows[2]);
Copier après la connexion

et vous pouvez le voir en actualisant la page. C'est l'heure des expressions Emoji :

Interaction de la base de données MySQL avec lextension PHP Mysqli

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 fonctionmysqli_fetch_allàMYSQLI_ASSOC(la valeur par défaut estMYSQLI_NUM) :

// 获取所有结果(关联数组) $rows = mysqli_fetch_all($res, MYSQLI_ASSOC); echo '
'; var_dump($rows[2]);
Copier après la connexion

Interaction de la base de données MySQL avec lextension PHP Mysqli

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 '
'; var_dump($rows);*/ // 获取单条结果 $row = mysqli_fetch_row($res); echo '
'; var_dump($row);
Copier après la connexion

Actualisez la page de test du navigateur et imprimez les résultats comme suit :

Interaction de la base de données MySQL avec lextension PHP Mysqli

可以看到返回结果已经是一个一维数组了,只包含一条记录。如果想要返回关联数组结果,需要通过一个新的函数 mysqli_fetch_assoc 函数来实现:

// 获取单条结果 // $row = mysqli_fetch_row($res); $row = mysqli_fetch_assoc($res); echo '
'; var_dump($row);
Copier après la connexion

对应的打印结果如下:

Interaction de la base de données MySQL avec lextension PHP Mysqli

将返回结果映射到指定对象

除了返回数组格式结果外,还可以借助 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;
Copier après la connexion

对应的打印结果如下,说明对象映射成功(调用了对象的魔术方法__toString打印输出该对象):

Interaction de la base de données MySQL avec lextension PHP Mysqli

避免 SQL 注入攻击

在上述数据库查询操作中,我们直接将原生 SQL 语句传递给 MySQL 数据库执行,如果 SQL 语句中包含了用户传递的参数,则存在 SQL 注入风险,要避免 SQL 注入攻击,在mysqli扩展中,可以通过构建预处理语句的方式实现:

  1. 首先通过 mysqli_prepare 函数构建包含占位符(替代具体参数值)的预处理 SQL 语句;
  2. 然后通过 mysqli_stmt_bind_param 函数将参数值绑定到预处理语句;
  3. 最后通过 mysqli_stmt_execute 函数执行填充参数值之后的完整 SQL 语句,由于底层做了转化处理,所以这时候执行的 SQL 语句不存在 SQL 注入风险。

下面,我们以插入记录到数据库为例,演示如何通过预处理语句的方式与数据库交互,提高代码安全性。

插入记录到数据库

我们首先基于预处理语句编写插入记录到数据库的代码如下(基于上面的$conn连接实例):

// 插入记录到数据库 $sql = 'INSERT INTO `post` (title, content, created_at) VALUES (?, ?, ?)'; // 构建预处理 SQL 语句 $stmt = mysqli_prepare($conn, $sql); // 绑定参数值 $title = '这是一篇测试文章'; $content = '测试文章啊啊啊
Copier après la connexion

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!

Étiquettes associées:
source:xueyuanjun.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!