POD 확장은 PHP5에 추가되었습니다. 이 확장은 데이터베이스에 액세스하기 위해 PHP의 내장 클래스 PDO를 제공하여 일관성 없는 데이터베이스 연결 문제를 해결합니다.
PDO의 목표는
가볍고 명확하며 편리한 API를 제공하는 것
입니다.
고급 기능을 제외하지 않고 다양한 RDBMS 라이브러리에 공통된 기능을 통합합니다.
PHP 스크립트를 통해 선택적으로 더 높은 수준의 추상화/호환성을 제공합니다.
PDO의 특징:
성능. PDO는 기존 데이터베이스 확장의 성공과 실패에 대해 처음부터 배웠습니다. PDO의 코드는 완전히 새로운 것이기 때문에 PHP 5의 최신 기능을 활용하기 위해 처음부터 성능을 다시 설계할 수 있는 기회가 있습니다.
능력. PDO는 공통 데이터베이스 기능을 기반으로 제공하는 동시에 RDBMS의 고유한 기능에 쉽게 액세스할 수 있도록 설계되었습니다.
단순한. PDO는 데이터베이스 작업을 쉽게 하도록 설계되었습니다. API는 코드에 강제로 들어가지 않으며 각 함수 호출이 수행하는 작업을 명확하게 보여줍니다.
런타임 시 확장 가능합니다. PDO 확장은 모듈식이므로 전체 PHP 프로그램을 다시 컴파일하거나 다시 설치하지 않고도 런타임에 데이터베이스 백엔드용 드라이버를 로드할 수 있습니다. 예를 들어, PDO_OCI 확장은 Oracle 데이터베이스 API를 구현하기 위해 PDO 확장을 대체합니다. MySQL, PostgreSQL, ODBC 및 Firebird용 드라이버도 있으며 더 많은 드라이버가 개발 중입니다. [분리 기호]
PDO 설치
여기에 있는 것은 WINDOWS에서 개발하기 위한 PDO 확장입니다. Linux에서 설치하고 구성하려면 다른 곳을 살펴보십시오.
버전 요구 사항: php5.1 및 이후 버전은 이미 패키지에 포함되어 있습니다. php5.0.x는 pecl.php.net에서 다운로드하여 PHP가 있는 폴더의 ext 폴더에 있는 확장 라이브러리에 배치해야 합니다. ;매뉴얼에는 5.0 이전 버전에서는 PDO 확장을 실행할 수 없다고 나와 있습니다. 구성:
pdo를 지원하도록 php.ini 구성 파일을 수정하십시오. (php.ini를 이해하지 못하는 경우 먼저 파악하십시오. phpinfo() 함수를 호출할 때 표시되는 php.ini를 수정해야 합니다.) 확장명 변경= php_pdo .dll 앞의 세미콜론을 제거합니다. 세미콜론은 PHP 구성 파일 주석 기호입니다. 더 있습니다
;확장자=php_pdo.dll
;확장자=php_pdo_firebird.dll
;확장자=php_pdo_informix.dll
;확장자=php_pdo_mssql.dll
;확장자=php_pdo_mysql.dll
;확장자=php_pdo_oci.dll
;확장자=php_pdo_oci8.dll
;확장자=php_pdo_odbc.dll
;확장자=php_pdo_pgsql.dll
;확장자=php_pdo_sqlite.dll
각 확장에 해당하는 데이터베이스는 다음과 같습니다.
드라이버 이름 지원되는 데이터베이스
PDO_DBLIB FreeTDS/Microsoft SQL Server/Sybase
PDO_FIREBIRD 파이어버드/인터베이스 6
PDO_INFORMIX IBM Informix 동적 서버
PDO_MYSQL MySQL 3.x/4.x
PDO_OCI Oracle 호출 인터페이스
PDO_ODBC ODBC v3(IBM DB2, unixODBC 및 win32 ODBC)
PDO_PGSQL 포스트그레SQL
PDO_SQLITE SQLite 3 및 SQLite 2
사용하려는 데이터베이스는 해당 확장자 앞에 있는 주석 기호 ";"를 제거하면 됩니다.
PDO 사용
여기서는 mysql을 설치했다고 가정하고, 그렇지 않다면 먼저 설치 방법을 찾아보세요. 내 것은 mysql5.0.22이고, MySQL 4.0.26을 사용하는 다른 사람들도 사용할 수 있습니다.
데이터베이스 연결:
다음 예제를 사용하여 PDO 연결 데이터베이스를 분석합니다.
<?php
$dbms='mysql'; //데이터베이스 유형 oracle은 ODI를 사용합니다. 개발자의 경우, 다른 데이터베이스를 사용하면 이를 변경하기만 하면 그렇게 많은 기능을 기억할 필요가 없습니다.
$host='localhost'; //데이터베이스 호스트 이름
$dbName='test'; //사용된 데이터베이스
$user='root'; //데이터베이스 연결 사용자 이름
$pass=''; //해당 비밀번호
$dsn="$dbms:host=$host;dbname=$dbName";
노력하다 {
$dbh = new PDO($dsn, $user, $pass); //PDO 객체를 초기화한다는 것은 데이터베이스 연결 객체 $dbh를 생성한다는 의미입니다.
echo "연결 성공<br/>";
/*검색 작업을 수행할 수도 있습니다.
foreach ($dbh->query('Select * from FOO') as $row) {
print_r($row); //echo($GLOBAL)를 사용하여 이 값을 볼 수 있습니다.
}
*/
$dbh = 널;
} 잡기(PDOException $e) {
die ("오류!: " . $e->getMessage() . "<br/>");
}
//기본적으로 이는 긴 연결이 아닙니다. 데이터베이스에 대한 긴 연결이 필요한 경우 끝에 array(PDO::ATTR_PERSISTENT => true) 매개변수를 추가해야 합니다.
$db = 새 PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true));
?>
데이터베이스 쿼리:
위의 쿼리를 이미 수행했으며 다음 쿼리를 사용할 수도 있습니다.
<?php
$db->setAttribute(PDO::ATTR_CASE, PDO::CASE_UPPER) //속성 설정
$rs = $db->query("선택 * FROM foo");
$rs->setFetchMode(PDO::FETCH_ASSOC);
$result_arr = $rs->fetchAll();
print_r($result_arr);
?>
위에서는 setAttribute() 메소드를 사용했기 때문에 필드명을 대문자로 강제하기 위해 두 개의 매개변수를 넣었습니다. 다음은 PDO::setAttribute()의 매개변수를 나열합니다. PDO::ATTR_CASE: 아래에 자세히 설명된 대로 열 이름을 형식으로 지정합니다(두 번째 매개변수):
PDO::CASE_LOWER: 열 이름을 소문자로 지정합니다.
PDO::CASE_NATURAL: 열 이름이 원래 형식입니다.
PDO::CASE_UPPER: 열 이름을 대문자로 강제합니다.
PDO::ATTR_ERRMODE: 오류 메시지.
PDO::ERRMODE_SILENT: 오류 정보는 표시하지 않고 오류 코드만 표시합니다.
PDO::ERRMODE_WARNING: 경고 오류를 표시합니다.
PDO::ERRMODE_EXCEPTION: 예외가 발생합니다.
PDO::ATTR_ORACLE_NULLS (ORACLE뿐만 아니라 다른 데이터베이스에도 유효함): )는 데이터베이스에서 반환된 NULL 값에 대해 PHP에서 해당 값을 지정합니다.
PDO::NULL_NATURAL: 변경되지 않았습니다.
PDO::NULL_EMPTY_STRING: 빈 문자열이 NULL로 변환됩니다.
PDO::NULL_TO_STRING: NULL은 빈 문자열로 변환됩니다.
PDO::ATTR_STRINGIFY_FETCHES: 가져올 때 숫자 값을 문자열로 변환합니다. bool이 필요합니다.
PDO::ATTR_STATEMENT_CLASS: PDOStatement에서 파생된 사용자 제공 명령문 클래스를 설정합니다. 영구 PDO 인스턴스와 함께 사용할 수 없습니다. 배열(문자열 클래스 이름, 배열(혼합 생성자_args))이 필요합니다.
PDO::ATTR_AUTOCOMMIT(OCI, Firebird 및 MySQL에서 사용 가능): 모든 단일 명령문을 자동 커밋할지 여부입니다.
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY(MySQL에서 사용 가능): 버퍼링된 쿼리를 사용합니다.
$rs->setFetchMode(PDO::FETCH_ASSOC); 예제에서는 반환 유형 선언인 PDOStatement::setFetchMode()가 있습니다.
다음과 같은 것들이 있습니다:
PDO::FETCH_ASSOC -- 연관 배열 형식
PDO::FETCH_NUM -- 숫자 인덱스 배열 형식
PDO::FETCH_BOTH -- 둘 다 배열 형식으로 사용 가능하며 이는 기본값입니다.
PDO::FETCH_OBJ -- 이전 mysql_fetch_object()와 유사한 객체 형태
더 많은 반환 유형 선언(PDOStatement::메소드 이름)은 매뉴얼을 참조하세요.
데이터 삽입, 업데이트, 삭제,
43
");
쿼리 작업은 주로 PDO::query(), PDO::exec(), PDO::prepare()입니다.
PDO::query()는 기록된 결과를 반환하는 작업, 특히 Select 작업에 주로 사용됩니다.
PDO::exec()는 주로 삽입, 업데이트, 삭제 및 기타 작업과 같이 결과 집합을 반환하지 않는 작업에 사용됩니다. 반환되는 결과는 현재 작업의 영향을 받는 열 수입니다.
PDO::prepare()는 주로 전처리 작업입니다. 전처리에서 SQL 문을 실행하려면 $rs->execute()를 사용해야 합니다. 이 방법은 매개 변수를 바인딩할 수 있으며 이 기사에서는 간단하게 설명할 수 없습니다. . 모두 매뉴얼 및 기타 문서를 참조할 수 있습니다.
결과 세트를 얻기 위한 주요 작업은 PDOStatement::fetchColumn(), PDOStatement::fetch(), PDOStatement::fetchALL()입니다.
PDOStatement::fetchColumn()은 가져오기 결과에 지정된 첫 번째 레코드의 필드입니다. 기본값은 첫 번째 필드입니다.
PDOStatement::fetch()는 레코드를 가져오는 데 사용됩니다.
PDOStatement::fetchAll()은 모든 레코드 세트를 하나로 가져오는 것입니다. 결과를 얻으려면 PDOStatement::setFetchMode를 통해 필요한 결과 세트의 유형을 설정하면 됩니다.
두 가지 주변 작업도 있습니다. 하나는 PDO::lastInsertId() 및 PDOStatement::rowCount()입니다. PDO::lastInsertId()는 마지막 삽입 작업을 반환하고 기본 키 열 유형은 마지막 자동 증가 ID입니다.
PDOStatement::rowCount()는 주로 PDO::query() 및 PDO::prepare()의 삭제, 삽입 및 업데이트 작업의 영향을 받는 결과 집합에 사용되며 PDO::exec() 메서드에는 유효하지 않습니다. 및 작업을 선택합니다.