목차
MySQLI_result 객체 속성" >MySQLI_result 객체 속성
쿼리 결과 집합 획득 " > 쿼리 결과 집합 획득
모든 결과 집합 가져오기
일반 결과 집합 가져오기
객체 결과 세트 가져오기
쿼리 결과 집합에서 필드 정보 가져오기" >쿼리 결과 집합에서 필드 정보 가져오기
总结" >总结
백엔드 개발 PHP 문제 PHP를 사용하여 MySQLi에서 MySQLI_result 개체 작업을 사용하는 방법

PHP를 사용하여 MySQLi에서 MySQLI_result 개체 작업을 사용하는 방법

Jul 01, 2021 pm 03:46 PM
php

저희는 이미 MYSQLI_result 관련 콘텐츠를 접한 적이 있습니다. 실제로는 쿼리의 결과 집합입니다. 그러나 PDO에서는 일반적으로 query() 또는 PDOStatement 개체를 통해 쿼리한 후 결과가 반환됩니다. 그러나 MySQLi에서는 쿼리 결과가 MySQLI_result 개체인 개체에도 저장됩니다.

PHP를 사용하여 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

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

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Dec 24, 2024 pm 04:42 PM

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

CakePHP 데이터베이스 작업 CakePHP 데이터베이스 작업 Sep 10, 2024 pm 05:25 PM

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

CakePHP 날짜 및 시간 CakePHP 날짜 및 시간 Sep 10, 2024 pm 05:27 PM

cakephp4에서 날짜와 시간을 다루기 위해 사용 가능한 FrozenTime 클래스를 활용하겠습니다.

CakePHP 파일 업로드 CakePHP 파일 업로드 Sep 10, 2024 pm 05:27 PM

파일 업로드 작업을 위해 양식 도우미를 사용할 것입니다. 다음은 파일 업로드의 예입니다.

CakePHP 라우팅 CakePHP 라우팅 Sep 10, 2024 pm 05:25 PM

이번 장에서는 라우팅과 관련된 다음과 같은 주제를 학습하겠습니다.

CakePHP 토론 CakePHP 토론 Sep 10, 2024 pm 05:28 PM

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

CakePHP 유효성 검사기 만들기 CakePHP 유효성 검사기 만들기 Sep 10, 2024 pm 05:26 PM

컨트롤러에 다음 두 줄을 추가하면 유효성 검사기를 만들 수 있습니다.

CakePHP 로깅 CakePHP 로깅 Sep 10, 2024 pm 05:26 PM

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

See all articles