PHP를 사용하여 MySQLi에서 MySQLI_result 개체 작업을 사용하는 방법
저희는 이미 MYSQLI_result 관련 콘텐츠를 접한 적이 있습니다. 실제로는 쿼리의 결과 집합입니다. 그러나 PDO에서는 일반적으로 query() 또는 PDOStatement 개체를 통해 쿼리한 후 결과가 반환됩니다. 그러나 MySQLi에서는 쿼리 결과가 MySQLI_result 개체인 개체에도 저장됩니다.
MySQLI_result 객체 속성
먼저 쿼리를 통해 MySQLI_result 객체를 얻어야 합니다.
$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) // }
MYSQLI_STMT를 사용하는 경우,execute() 메소드가 쿼리문을 실행한 후 바로 get_result() 메소드를 통해 MySQLI_result 객체를 얻을 수 있습니다.
이 객체에서는 current_field 현재 필드, field_count 필드 번호, lengths 필드 길이, num_rows 행 번호, 유형 및 기타 속성을 볼 수 있습니다. 많은 학생들은 current_field와 lengths에 실제 내용이 없는 것 같다는 사실을 알게 될 것입니다. 실제로 이 두 속성은 특정 작업에서 내용을 표시해야 합니다. 예를 들어 lengths에는 fetch() 결과 집합이 나올 때까지 정보가 없습니다.
$result->fetch_array(); var_dump($result); // …… // …… // ["lengths"]=> // array(4) { // [0]=> // int(0) // [1]=> // int(3) // [2]=> // int(3) // [3]=> // int(2) // } // …… // ……
아래 필드 정보를 탐색하여 보면 current_field 속성의 내용이 표시됩니다.
쿼리 결과 집합 획득
MySQLI_result 개체의 표시되는 속성 중 위의 정보만 볼 수 있습니다. 이는 비즈니스 개발에 별로 유용하지 않습니다. 이는 쿼리에 행 수를 기반으로 한 결과가 있는지 확인하는 데 사용할 수 있으며, 더 중요한 것은 결과 집합에서 데이터 정보를 얻어야 한다는 것입니다. 이 경우에는 다른 기능을 사용해야 합니다.
모든 결과 집합 가져오기
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" // } // …… // ……
fetch_all() 메서드는 데이터 집합의 모든 데이터를 가져와서 배열 형식으로 반환하는 데 사용됩니다. 기본적으로 반환 형식을 지정할 수 있습니다. MYSQLI_NUM과 같은 배열 첨자는 PDO와 유사하게 이를 MySQLI_ASSOC로 직접 지정하여 키 이름 형식으로 데이터 내용을 반환할 수 있습니다.
data_seek() 메서드는 결과 집합의 아래 첨자를 이동합니다. 나중에 소개할 메소드를 얻거나 사용하여 결과 집합을 한 번 반복할 때 다시 탐색하면 커서가 이미 마지막 위치에 있으므로 데이터를 얻을 수 없습니다. 위 코드에서는 이 결과 집합을 반복적으로 연산할 수 있도록 커서를 초기 위치인 첨자 0 위치로 두 번 반환했습니다.
일반 결과 집합 가져오기
데이터를 행 단위로 가져오려면 다양한 형태의 결과 집합 데이터 획득 방법을 사용할 수 있습니다.
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" // }
fetch_array()를 사용하면 다음 행의 결과 데이터를 가져와서 배열 형식으로 반환합니다. 반환되는 결과 집합의 형식을 지정할 수도 있습니다. 단, fetch_all()과 유사합니다. 모든 데이터 세트 대신 다음 행만 가져오고 해당 매개변수의 기본값은 반환된 MYSQLI_BOTH입니다. 즉, 숫자 첨자와 키 이름 첨자가 동시에 결과를 반환합니다.
MYSQLI_ASSOC 형식으로 데이터를 직접 반환하는 fetch_assoc() 메소드도 있습니다. 이 메소드는 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" // }
또 다른 메소드인 fetch_row()는 fetch_array(MYSQLI_NUM)와 유사한 메소드라고 볼 수 있습니다. 실제로는 기본적으로 MySQLI_NUM으로 지정된 구조체 반환 방식이다.
var_dump($result->fetch_row()); // array(4) { // [0]=> // int(43) // [1]=> // string(3) "kkk" // [2]=> // string(3) "666" // [3]=> // string(2) "k6" // }
객체 결과 세트 가져오기
객체 결과 세트를 가져오는 것은 실제로 PDO의 관련 함수와 유사합니다. 결과를 클래스에 직접 넣고 인스턴스화하여 객체를 반환합니다.
ar_dump($result->fetch_object()); // object(stdClass)#4 (4) { // ["id"]=> // int(42) // ["username"]=> // string(3) "kkk" // ["password"]=> // string(3) "666" // ["salt"]=> // string(2) "k6" // }
여기에서는 클래스를 지정하지 않으므로 stdClass를 사용하여 객체 구조를 반환합니다. 또한 클래스를 지정하고 이 클래스의 생성자에 매개변수를 전달할 수도 있습니다. 이는 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" // }
쿼리 결과 집합에서 필드 정보 가져오기
다음으로 MySQLI_result 객체에서 필드 관련 정보를 가져오는 방법을 살펴보겠습니다. 현재 쿼리의 결과 집합에서 모든 필드 정보를 직접 얻을 수 있습니다.
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" // …… // ……
이 코드에서는 MySQLI_result 객체의 current_field 속성 정보를 살펴보았는데, 현재 어떤 필드가 위치하고 있는지 첨자를 가리키는 것을 알 수 있습니다.
필드 정보가 매우 상세하고, 해당 속성의 키 이름도 매우 직관적이므로 여기서는 자세한 설명을 생략하겠습니다.
$result->field_seek(1); while ($finfo = $result->fetch_field()) { var_dump($finfo); } // object(stdClass)#5 (13) { // ["name"]=> // string(8) "username" // ["orgname"]=> // string(8) "username"
field_seek() 메서드를 통해 필드 순회 커서를 이동할 수도 있습니다. 여기서는 커서를 1로 이동하고 두 번째 사용자 이름 필드부터 탐색을 시작합니다.
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) // }
fetch_fields() 메서드는 fetch_all()과 유사하며 모든 필드 정보를 가져옵니다. 그리고 fetch_field_direct()는 해당 매개변수를 기반으로 지정된 첨자의 필드 정보를 가져옵니다.
总结
至此,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视频教程
위 내용은 PHP를 사용하여 MySQLi에서 MySQLI_result 개체 작업을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP에서 데이터베이스 작업은 매우 쉽습니다. 이번 장에서는 CRUD(생성, 읽기, 업데이트, 삭제) 작업을 이해하겠습니다.

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

CakePHP에 로그인하는 것은 매우 쉬운 작업입니다. 한 가지 기능만 사용하면 됩니다. cronjob과 같은 백그라운드 프로세스에 대해 오류, 예외, 사용자 활동, 사용자가 취한 조치를 기록할 수 있습니다. CakePHP에 데이터를 기록하는 것은 쉽습니다. log() 함수는 다음과 같습니다.
