Heim  >  Artikel  >  Backend-Entwicklung  >  So verwenden Sie die MySQLI_result-Objektoperation in MySQLi mit PHP

So verwenden Sie die MySQLI_result-Objektoperation in MySQLi mit PHP

醉折花枝作酒筹
醉折花枝作酒筹Original
2021-07-01 15:46:212525Durchsuche

Wir sind bereits zuvor mit MYSQLI_result-bezogenen Inhalten in Kontakt gekommen. Es handelt sich tatsächlich um die Ergebnismenge einer Abfrage. In PDO werden Ergebnisse jedoch im Allgemeinen nach der Abfrage über das query()- oder PDOStatement-Objekt zurückgegeben. Aber in MySQLi werden die Abfrageergebnisse auch in einem Objekt abgelegt, nämlich dem MySQLI_result-Objekt.

So verwenden Sie die MySQLI_result-Objektoperation in MySQLi mit PHP

Eigenschaften des MySQLI_result-Objekts

Zunächst müssen wir über eine Abfrage ein MySQLI_result-Objekt abrufen.

$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)
//   }

Wenn Sie MYSQLI_STMT verwenden, können Sie ein MySQLI_result-Objekt über die Methode get_result() direkt nach der Ausführung der Abfrageanweisung durch die Methodeexecute() abrufen.

In diesem Objekt können wir das aktuelle Feld current_field, die Feldnummer field_count, die Feldlänge lengths, die Zeilennummer num_rows, den Typ und andere Attribute sehen. Viele Schüler werden feststellen, dass „current_field“ und „lengths“ keinen tatsächlichen Inhalt zu haben scheinen. Tatsächlich müssen diese beiden Attribute unter bestimmten Vorgängen keine Informationen enthalten, bis sie nach der fetch()-Ergebnismenge angezeigt werden.

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

Der Inhalt des Attributs current_field wird angezeigt, wenn wir die Feldinformationen unten durchlaufen und anzeigen.

Abfrageergebnissatzerfassung

Unter den sichtbaren Attributen des MySQLI_result-Objekts können wir nur die oben genannten Informationen sehen. Es ist für unsere Geschäftsentwicklung nicht sehr nützlich. Zusätzlich zu num_rows, das verwendet werden kann, um anhand der Anzahl der Zeilen zu bestimmen, ob die Abfrage Ergebnisse liefert, müssen wir die Dateninformationen in der Ergebnismenge abrufen In diesem Fall müssen wir andere Funktionen verwenden.

Alle Ergebnissätze abrufen

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"
//     }
//     ……
//     ……

Die Methode fetch_all() wird verwendet, um alle Daten im Datensatz abzurufen und in Form eines Arrays zurückzugeben. Standardmäßig ist es in der Form Array-Index wie MYSQLI_NUM, ähnlich wie PDO, können wir ihn direkt als MySQLI_ASSOC angeben, um den Dateninhalt in Form eines Schlüsselnamens zurückzugeben. Die Methode

data_seek() verschiebt den Index der Ergebnismenge. Wenn wir die später eingeführte Methode abrufen oder verwenden, um die Ergebnismenge einmal zu durchlaufen, befindet sich der Cursor beim erneuten Durchlaufen bereits an der letzten Position, sodass wir die Daten nicht abrufen können. Im obigen Code setzen wir den Cursor zweimal auf die Indexposition 0 zurück, die die Anfangsposition darstellt, sodass wir diese Ergebnismenge wiederholt bearbeiten können.

Gewöhnliche Ergebnismenge abrufen

Wenn Sie Daten Zeile für Zeile abrufen möchten, können wir verschiedene Formen der Datenerfassungsmethode für Ergebnismengen verwenden.

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"
//   }

Mit fetch_array() werden die Ergebnisdaten der nächsten Zeile abgerufen und in Form eines Arrays zurückgegeben. Es kann auch das Format der zurückgegebenen Ergebnismenge angeben. Es ähnelt fetch_all() Ruft nur die nächste Zeile anstelle aller Datensätze ab, und seine Parameter sind standardmäßig auf den zurückgegebenen MYSQLI_BOTH eingestellt, d. h. der numerische Index und der Schlüsselnamensindex geben gleichzeitig Ergebnisse zurück.

Es gibt auch eine fetch_assoc()-Methode, die Daten direkt im MYSQLI_ASSOC-Format zurückgibt. Diese Methode erfordert keine Parameter. Sie kann als Kapselung der Verwendung von fetch_array(MYSQLI_ASSOC) betrachtet werden.

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

Die andere Methode, fetch_row(), kann als eine Methode ähnlich fetch_array(MYSQLI_NUM) betrachtet werden. Es handelt sich tatsächlich um die Strukturrückgabemethode, die standardmäßig als MySQLI_NUM angegeben ist.

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

Das Abrufen der Objektergebnismenge

Das Abrufen der Objektergebnismenge ähnelt tatsächlich den zugehörigen Funktionen in PDO. Es fügt die Ergebnisse direkt in eine Klasse ein und instanziiert sie, um ein Objekt zurückzugeben.

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

Hier geben wir keine Klasse an, daher wird stdClass verwendet, um die Objektstruktur zurückzugeben. Wir können auch eine Klasse angeben und Parameter an den Konstruktor dieser Klasse übergeben, was mit der zugehörigen Funktionalität in PDO identisch ist.

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"
//   }

Feldinformationen aus der Abfrageergebnismenge abrufen

Als nächstes schauen wir uns an, wie wir die feldbezogenen Informationen im MySQLI_result-Objekt abrufen. Wir können alle Feldinformationen direkt im Ergebnissatz der aktuellen Abfrage abrufen.

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"
//     ……
//     ……

In diesem Code haben wir uns die Attributinformationen „current_field“ des MySQLI_result-Objekts angesehen und können sehen, dass es auf den Index des Feldes hinweist, in dem es sich gerade befindet.

Die Feldinformationen sind sehr detailliert und die Schlüsselnamen dieser Attribute sind ebenfalls sehr intuitiv, daher werde ich hier keine detaillierte Erklärung geben.

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

Wir können den Felddurchlaufcursor auch über die Methode field_seek() bewegen. Hier bewegen wir den Cursor auf 1 und beginnen mit der Durchquerung vom zweiten Benutzernamensfeld.

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)
//   }

Die Methode fetch_fields() ähnelt fetch_all(), sie ruft alle Feldinformationen ab. Und fetch_field_direct() ruft die Feldinformationen des angegebenen Index basierend auf den Parametern ab.

总结

至此,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

推荐学习:php视频教程

Das obige ist der detaillierte Inhalt vonSo verwenden Sie die MySQLI_result-Objektoperation in MySQLi mit PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn