Comment utiliser l'opération d'objet MySQLI_result dans MySQLi avec PHP

醉折花枝作酒筹
Libérer: 2023-03-11 07:04:02
original
2628 Les gens l'ont consulté

Nous avons déjà été en contact avec du contenu lié à MYSQLI_result auparavant. Il s'agit en fait du jeu de résultats d'une requête. Cependant, dans PDO, les résultats sont généralement renvoyés après une interrogation via l'objet query() ou PDOStatement. Mais dans MySQLi, les résultats de la requête sont également placés dans un objet, qui est l'objet MySQLI_result.

Comment utiliser l'opération d'objet MySQLI_result dans MySQLi avec PHP

Propriétés de l'objet MySQLI_result

Tout d'abord, nous devons obtenir un objet MySQLI_result via une requête.

$stmt = $mysqli->prepare("select * from zyblog_test_user where username = 'kkk'");

$stmt->execute(); // 执行语句
$result = $stmt->get_result();
var_dump($result);
// object(mysqli_result)#3 (5) {
//     ["current_field"]=>
//     int(0)
//     ["field_count"]=>
//     int(4)
//     ["lengths"]=>
//     NULL
//     ["num_rows"]=>
//     int(7)
//     ["type"]=>
//     int(0)
//   }
Copier après la connexion

Si vous utilisez MYSQLI_STMT, vous pouvez obtenir un objet MySQLI_result via la méthode get_result() directement après que la méthodeexecute() exécute l'instruction de requête.

Dans cet objet, nous pouvons voir le champ actuel current_field, le numéro de champ field_count, la longueur du champ lengths, le numéro de ligne num_rows, le type et d'autres attributs. De nombreux étudiants constateront que current_field et lengths ne semblent pas avoir de contenu réel. En fait, ces deux attributs doivent afficher du contenu dans le cadre d'opérations spécifiques. Par exemple, lengths n'aura d'informations qu'après le jeu de résultats fetch().

$result->fetch_array();
var_dump($result);
// ……
// ……
// ["lengths"]=>
//   array(4) {
//     [0]=>
//     int(0)
//     [1]=>
//     int(3)
//     [2]=>
//     int(3)
//     [3]=>
//     int(2)
//   }
// ……
// ……
Copier après la connexion

Le contenu de l'attribut current_field sera affiché lorsque nous parcourrons et visualiserons les informations du champ ci-dessous.

Acquisition du jeu de résultats de requête

Parmi les attributs visibles de l'objet MySQLI_result, nous ne pouvons voir que les informations ci-dessus. Ce n'est pas très utile pour notre développement commercial. En plus de num_rows, qui peut être utilisé pour déterminer si la requête a des résultats en fonction du nombre de lignes, nous devons plus important encore obtenir les informations sur les données dans l'ensemble de résultats. Dans ce cas, nous devons utiliser d’autres fonctions. Récupérons les données. La méthode

Obtenir tous les ensembles de résultats

var_dump($result->fetch_all());
// array(7) {
//     [0]=>
//     array(4) {
//       [0]=>
//       int(42)
//       [1]=>
//       string(3) "kkk"
//       [2]=>
//       string(3) "666"
//       [3]=>
//       string(2) "k6"
//     }
//     ……
//     ……



$result->data_seek(0);
var_dump($result->fetch_all(MYSQLI_ASSOC));
// array(7) {
//     [0]=>
//     array(4) {
//       ["id"]=>
//       int(42)
//       ["username"]=>
//       string(3) "kkk"
//       ["password"]=>
//       string(3) "666"
//       ["salt"]=>
//       string(2) "k6"
//     }
//     ……
//     ……
Copier après la connexion

fetch_all() est utilisée pour obtenir toutes les données de l'ensemble de données et les renvoyer sous la forme d'un tableau. Elle peut spécifier le format de retour par défaut. indice de tableau tel que MYSQLI_NUM , similaire à PDO, nous pouvons le spécifier directement comme MySQLI_ASSOC pour renvoyer le contenu des données sous forme de nom de clé. La méthode

data_seek() déplace l'indice du jeu de résultats. Lorsque nous obtenons ou utilisons la méthode qui sera introduite plus tard pour parcourir une fois l'ensemble de résultats, si nous le parcourons à nouveau, son curseur est déjà à la dernière position, nous ne pouvons donc pas obtenir les données. Dans le code ci-dessus, nous remettons le curseur deux fois à la position d'indice 0, qui est la position initiale, afin que nous puissions exploiter cet ensemble de résultats à plusieurs reprises.

Obtenir un ensemble de résultats ordinaire

Si vous souhaitez obtenir des données ligne par ligne, nous pouvons utiliser diverses formes de méthodes d'acquisition de données d'ensemble de résultats.

var_dump($result->fetch_array());
// array(8) {
//     [0]=>
//     int(42)
//     ["id"]=>
//     int(42)
//     [1]=>
//     string(3) "kkk"
//     ["username"]=>
//     string(3) "kkk"
//     [2]=>
//     string(3) "666"
//     ["password"]=>
//     string(3) "666"
//     [3]=>
//     string(2) "k6"
//     ["salt"]=>
//     string(2) "k6"
//   }

var_dump($result->fetch_array(MYSQLI_ASSOC));
// array(4) {
//     ["id"]=>
//     int(43)
//     ["username"]=>
//     string(3) "kkk"
//     ["password"]=>
//     string(3) "666"
//     ["salt"]=>
//     string(2) "k6"
//   }
Copier après la connexion

Utiliser fetch_array() consiste à obtenir les données de résultat de la ligne suivante et à les renvoyer sous la forme d'un tableau. Il peut également spécifier le format de l'ensemble de résultats renvoyé. Il est similaire à fetch_all(), sauf qu'il est similaire à fetch_all(). récupère uniquement la ligne suivante au lieu de Tous les ensembles de données, et ses paramètres par défaut sont le MYSQLI_BOTH renvoyé, c'est-à-dire que l'indice numérique et l'indice du nom de clé renvoient les résultats en même temps.

Il existe également une méthode fetch_assoc(), qui renvoie directement les données au format MYSQLI_ASSOC. Cette méthode ne nécessite aucun paramètre. Elle peut être considérée comme une encapsulation de l'utilisation de fetch_array(MYSQLI_ASSOC).

var_dump($result->fetch_assoc());
// array(4) {
//     ["id"]=>
//     int(42)
//     ["username"]=>
//     string(3) "kkk"
//     ["password"]=>
//     string(3) "666"
//     ["salt"]=>
//     string(2) "k6"
//   }
Copier après la connexion

L'autre méthode, fetch_row(), peut être considérée comme une méthode similaire à fetch_array(MYSQLI_NUM). Il s'agit en fait de la méthode de retour de structure spécifiée par défaut comme MySQLI_NUM.

var_dump($result->fetch_row());
// array(4) {
//     [0]=>
//     int(43)
//     [1]=>
//     string(3) "kkk"
//     [2]=>
//     string(3) "666"
//     [3]=>
//     string(2) "k6"
//   }
Copier après la connexion

Obtenir le jeu de résultats de l'objet

Obtenir le jeu de résultats de l'objet est en fait similaire aux fonctions associées dans PDO. Il place les résultats directement dans une classe et l'instancie pour renvoyer un objet.

ar_dump($result->fetch_object());
// object(stdClass)#4 (4) {
//     ["id"]=>
//     int(42)
//     ["username"]=>
//     string(3) "kkk"
//     ["password"]=>
//     string(3) "666"
//     ["salt"]=>
//     string(2) "k6"
//   }
Copier après la connexion

Ici, nous ne spécifions pas de classe, il utilise donc stdClass pour renvoyer la structure de l'objet. Nous pouvons également spécifier une classe et transmettre des paramètres au constructeur de cette classe, ce qui est identique à la fonctionnalité associée dans PDO.

class User
{
    public function __construct()
    {
        print_r(func_get_args());
    }
}
var_dump($result->fetch_object('User', [1, 2, 3]));
// Array
// (
//     [0] => 1
//     [1] => 2
//     [2] => 3
// )
// object(User)#4 (4) {
//     ["id"]=>
//     int(42)
//     ["username"]=>
//     string(3) "kkk"
//     ["password"]=>
//     string(3) "666"
//     ["salt"]=>
//     string(2) "k6"
//   }
Copier après la connexion

Obtention des informations sur le champ à partir du jeu de résultats de la requête

Ensuite, regardons comment obtenir les informations relatives au champ dans l'objet MySQLI_result. Nous pouvons obtenir directement toutes les informations de champ dans l'ensemble de résultats de la requête en cours.

while ($finfo = $result->fetch_field()) {
    var_dump($result->current_field);
    var_dump($finfo);
}
// int(1)
// object(stdClass)#4 (13) {
//     ["name"]=>
//     string(2) "id"
//     ["orgname"]=>
//     string(2) "id"
//     ["table"]=>
//     string(16) "zyblog_test_user"
//     ["orgtable"]=>
//     string(16) "zyblog_test_user"
//     ["def"]=>
//     string(0) ""
//     ["db"]=>
//     string(9) "blog_test"
//     ["catalog"]=>
//     string(3) "def"
//     ["max_length"]=>
//     int(0)
//     ["length"]=>
//     int(11)
//     ["charsetnr"]=>
//     int(63)
//     ["flags"]=>
//     int(49667)
//     ["type"]=>
//     int(3)
//     ["decimals"]=>
//     int(0)
//   }
// int(2)
//   object(stdClass)#5 (13) {
//     ["name"]=>
//     string(8) "username"
//     ["orgname"]=>
//     string(8) "username"
//     ……
//     ……
Copier après la connexion

Dans ce code, nous avons examiné les informations de l'attribut current_field de l'objet MySQLI_result, et nous pouvons voir qu'il indique l'indice du champ actuellement situé.

Les informations des champs sont très détaillées, et les noms clés de ces attributs sont également très intuitifs, je ne donnerai donc pas d'explication détaillée ici.

$result->field_seek(1);
while ($finfo = $result->fetch_field()) {
    var_dump($finfo);
}
// object(stdClass)#5 (13) {
//     ["name"]=>
//     string(8) "username"
//     ["orgname"]=>
//     string(8) "username"
Copier après la connexion

Nous pouvons également déplacer le curseur de traversée de champ via la méthode field_seek(). Ici, nous déplaçons le curseur sur 1 et nous commencerons à parcourir à partir du deuxième champ de nom d'utilisateur. La méthode

var_dump($result->fetch_fields());
// array(4) {
//     [0]=>
//     object(stdClass)#5 (13) {
//       ["name"]=>
//       string(2) "id"
//       ["orgname"]=>
//       string(2) "id"
//       ["table"]=>
//       string(16) "zyblog_test_user"
//       ["orgtable"]=>
//       string(16) "zyblog_test_user"
//       ["def"]=>
//       string(0) ""
//       ["db"]=>
//       string(9) "blog_test"
//       ["catalog"]=>
//       string(3) "def"
//       ["max_length"]=>
//       int(0)
//       ["length"]=>
//       int(11)
//       ["charsetnr"]=>
//       int(63)
//       ["flags"]=>
//       int(49667)
//       ["type"]=>
//       int(3)
//       ["decimals"]=>
//       int(0)
//     }
//     [1]=>
//     object(stdClass)#4 (13) {
//       ["name"]=>
//       string(8) "username"

var_dump($result->fetch_field_direct(2));
// object(stdClass)#7 (13) {
//     ["name"]=>
//     string(8) "password"
//     ["orgname"]=>
//     string(8) "password"
//     ["table"]=>
//     string(16) "zyblog_test_user"
//     ["orgtable"]=>
//     string(16) "zyblog_test_user"
//     ["def"]=>
//     string(0) ""
//     ["db"]=>
//     string(9) "blog_test"
//     ["catalog"]=>
//     string(3) "def"
//     ["max_length"]=>
//     int(3)
//     ["length"]=>
//     int(765)
//     ["charsetnr"]=>
//     int(33)
//     ["flags"]=>
//     int(0)
//     ["type"]=>
//     int(253)
//     ["decimals"]=>
//     int(0)
//   }
Copier après la connexion

fetch_fields() est similaire à fetch_all(), elle récupère simplement toutes les informations sur le champ. Et fetch_field_direct() obtient les informations de champ de l'indice spécifié en fonction des paramètres.

总结

至此,MySQLi 相关扩展的学习我们也就告一段落了,其它的一些类和函数比如 MySQLI_Driver 、 MySQLI_Exception 之类的内容大家可以自行查阅相关的文档,内容都不是很多。MySQLI_Driver 对象可以帮助我们指定当前驱动的报错形式,之前的文章中我们也已经接触过。

总体来说,整个 PHP 中和 MySQL 打交道的官方扩展我们就已经全部学习完了,PDO 和 MYSQLi 这两个扩展大家更主要的还是要掌握它们的区别和联系。在实际的业务开发中 PDO 还是会使用得更多,但 MySQLi 也绝不是能够完全忽略的,多多动手尝试学习吧。

测试代码:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202009/source/9.PHP中的MySQLi扩展学习(六)MySQLI_result对象操作.php
Copier après la connexion

推荐学习: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!

Étiquettes associées:
php
source:segmentfault.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
Tutoriels populaires
Plus>
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!