>  기사  >  백엔드 개발  >  PHP 개발 프레임워크 Yii 프레임워크 튜토리얼(25) 데이터베이스 쿼리 빌더 예

PHP 개발 프레임워크 Yii 프레임워크 튜토리얼(25) 데이터베이스 쿼리 빌더 예

黄舟
黄舟원래의
2017-01-22 09:23:581254검색

이전 기사에서는 PHP가 DAO(Database Access Object Interface)를 사용하여 데이터베이스에 액세스하는 방법을 소개했습니다. DAO를 사용하려면 프로그래머가 SQL 문을 작성해야 합니다. Yii는 프로그래머가 SQL 문을 생성하는 데 도움이 되는 쿼리 빌더를 제공합니다. SQL 문을 동적으로 생성하는 개체 지향 방법을 제공하므로 PHP의 DAO와 .Net의 DAO 인터페이스는 LINQ보다 기능이 더 적지만 LINQ와 약간 유사합니다. 일부 간단한 SQL 쿼리의 경우 일반적으로 이전 기사에서 Employee 테이블을 쿼리하는 것과 같이 쿼리 빌더를 사용할 필요가 없습니다.

SQL 문을 직접 사용하는 것에 비해 Query Builder를 사용하면 다음과 같은 이점이 있습니다.

프로그램을 통해 보다 복잡한 SQL 쿼리를 동적으로 생성할 수 있도록 지원합니다.

생성된 SQL 문의 테이블 이름과 목록에 자동으로 따옴표를 추가하여 SQL 예약 식별자와의 충돌을 방지합니다.

SQL 주입 위험을 줄이기 위해 매개변수에 따옴표를 추가하고 매개변수 바인딩을 최대한 사용하도록 지정합니다.

쿼리 빌더를 사용하면 SQL 문을 직접 작성하지 않지만 특정 수준의 데이터베이스 추상화를 제공하여 데이터베이스 유형 전환을 용이하게 합니다.

이 예제는 Chinook의 두 테이블 Customer와 Employee를 쿼리하고 EmployeeId=4로 관리되는 모든 고객의 연락처 정보를 쿼리합니다.

SQL 쿼리를 사용하는 경우 다음과 같이 작성할 수 있습니다.

SELECT c.FirstName, c.LastName , c.Address,c.Email。
FROM customer c
INNER JOIN
employee e
ON c.SupportRepId=e.EmployeeId

WHERE e.EmployeeId=4 이 예에서는 쿼리 빌더를 사용하여 SQL 쿼리를 생성하고 SiteController의 indexAction 메서드를 수정합니다.

public function actionIndex()
{
$model = array();
$connection=Yii::app()->db;
$command=$connection->createCommand()
->select('c.FirstName, c.LastName, c.Address,c.Email')
->from('customer c')
->join('employee e','c.SupportRepId=e.EmployeeId')
->where('e.EmployeeId=4');
$dataReader=$command->query();
// each $row is an array representing a row of data
foreach($dataReader as $row)
{
$customer= new DataModel();
$customer->firstName=$row['FirstName'];
$customer->lastName=$row['LastName'];
$customer->address=$row['Address'];
$customer->email=$row['Email'];
$model[]=$customer;
}
$this->render('index', array(
'model' => $model,
));
}

쿼리 작성기도 CDbCommand를 사용하는 것을 볼 수 있습니다. CDbCommand는 데이터 쿼리를 위해 다음과 같은 방법을 제공합니다.

select()
selectDistinct()
from()
where()
join()
leftJoin()
rightJoin()
crossJoin()
naturalJoin()
group()
having()
order()
limit()
offset()
union()

또한 데이터 정의 방법:

createTable()
renameTable()
dropTable()
truncateTable()
addColumn()
renameColumn()
alterColumn()
dropColumn()是
createIndex()
dropIndex()

CDbCommand에서 지원하는 메소드는 기본적으로 SQL과 동일하다는 점 참고하세요. 문의 키워드는 하나씩 대응되므로 Query Builder를 사용하지 않고 전적으로 개인의 취향에 맡깁니다. 간단한 SQL문의 경우 SQL문을 직접 사용할 수 있습니다. , 보다 복잡한 쿼리의 경우 쿼리 빌더를 사용할 수 있습니다.

이 예제는 결과를 표시합니다.

PHP 개발 프레임워크 Yii 프레임워크 튜토리얼(25) 데이터베이스 쿼리 빌더 예

위는 PHP 개발 프레임워크 Yii Framework 튜토리얼(25) 데이터베이스-쿼리 빌더 예제의 내용입니다. 관련 내용을 더 보시려면 PHP 중국어 웹사이트(www.php.cn)를 팔로우하세요!

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