> PHP 프레임워크 > ThinkPHP > ThinkPHP5.1: 배열 객체 쿼리 사용

ThinkPHP5.1: 배열 객체 쿼리 사용

爱喝马黛茶的安东尼
풀어 주다: 2019-12-16 16:04:12
앞으로
4027명이 탐색했습니다.

ThinkPHP5.1: 배열 객체 쿼리 사용

5.0을 사용해본 개발자들은 5.0의 배열 쿼리 방식에 의존하는 경향이 있는데, 아쉽게도 5.1의 배열 쿼리 방식은 5.0의 배열 쿼리 방식과 많이 다르기 때문에 개발자들은 5.1의 배열 쿼리가 쉽지 않다고 불평하는 경우가 많습니다. 사용합니다.

우선 보안과 사용 편의성 때문에 배열 쿼리 조건의 사용은 공식적으로 권장되지 않습니다. 둘째, 버전 5.1에서는 실제로 이전 배열을 대체할 새로운 배열 개체 쿼리 방법을 제공한다는 사실을 모르실 수도 있습니다. 상태.

버전이 V5.1.21 이상인 경우 아래에 언급된 배열 객체 쿼리 방법을 시도해 볼 수 있습니다. 확실히 예상치 못한 놀라움을 겪게 될 것입니다^_^

배열 쿼리 조건에 익숙하거나 이에 크게 의존하는 사용자의 경우, 배열 개체 쿼리를 선택합니다. 이 개체는 일반 배열 쿼리와 시스템 쿼리 표현 간의 연결을 완성합니다. 그러나 시스템에서 권장하는 쿼리 표현 방법과 비교하면 SQL 삽입 상황을 방지하기 위해 변수 보안에 주의해야 합니다.

배열 객체 쿼리를 사용하려면 먼저 thinkdbWhere 클래스를 도입해야 합니다.

use think\db\Where;
로그인 후 복사

Where 객체를 사용하는 방법에는 일반적으로 두 가지가 있습니다. 첫 번째 방법은 여전히 ​​5.0과 마찬가지로 배열 조건을 사용하여 쿼리 조건을 정의합니다.

$map = [
    'name' => ['like', 'thinkphp%'],
    'title' => ['like', '%think%'],
    'id' => ['>', 10],
    'status' => 1,
];
로그인 후 복사

그런 다음 실제로 where 메서드를 사용할 때 다음과 같이 변경합니다. it to

Db::name('user')
    ->where(new Where($map))
    ->select();
로그인 후 복사

생성된 SQL은 다음과 같습니다.

SELECT * FROM `think_user` WHERE `name` LIKE 'thinkphp%' AND `title` LIKE '%think%' AND `id` > 10 AND `status` =1
로그인 후 복사

이 방법은 수정하기 가장 쉽고, 한 번의 클릭으로 5.0 배열 쿼리 방법으로 전환하는 것과 같습니다. 물론 Db 쿼리 외에 모델 쿼리도 지원됩니다.

두 번째 방법은 Where 개체를 직접 인스턴스화한 다음 where 메서드를 쿼리할 때 Where 개체 인스턴스를 직접 전달하는 것입니다.

$where = new Where;
$where['id'] = ['in', [1, 2, 3]];
$where['title'] = ['like', '%php%'];
Db::name('user')
    ->where($where)
    ->select();
로그인 후 복사

객체는 ArrayAccess 인터페이스를 구현하므로 배열로 직접 할당할 수 있습니다.

생성된 SQL은 다음과 같습니다.

SELECT * FROM `think_user` WHERE   `id` IN (1,2,3) AND `title` LIKE '%php%'
로그인 후 복사

Where 개체 쿼리를 사용하면 다른 쿼리 방법과 혼합할 수 있습니다. 배열 쿼리 객체를 혼합할 때 배열 쿼리 객체의 쿼리 조건에 괄호를 추가하려면

$where          = new Where;
$where['id']    = ['in', [1, 2, 3]];
$where['title'] = ['like', '%php%'];
Db::name('user')
    ->where($where->enclose())
    ->where('status', 1)
    ->select();
로그인 후 복사

를 사용하면 됩니다. 생성된 SQL은 다음과 같습니다.

SELECT * FROM `think_user` WHERE  ( `id` IN (1,2,3) AND `title` LIKE '%php%' ) AND  `status` =1
로그인 후 복사

enclose 메소드는 쿼리 조건이 두 쿼리 모두에서 괄호로 묶인다는 의미입니다. 측면.

배열 객체를 사용하여 쿼리하는 경우 데이터 유형을 확인하고 사용자가 데이터를 결정하도록 하지 마십시오. 이로 인해 SQL 삽입 가능성이 발생할 수 있습니다.

PHP 중국어 웹사이트에는 무료 ThinkPHP 입문 튜토리얼이 많이 있습니다. 누구나 배울 수 있습니다!

이 기사는 https://blog.thinkphp.cn/778497

에서 복제되었습니다.

위 내용은 ThinkPHP5.1: 배열 객체 쿼리 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:thinkphp.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿