PHP는 웹 시스템 구축을 위한 강력한 도구이지만 데이터베이스에 액세스하는 PHP의 기능은 표준화되지 않았습니다. 각 데이터베이스는 서로 다르고 호환되지 않는 API(응용 프로그래밍 인터페이스)를 사용합니다. 이러한 격차를 메우기 위해 ADODB가 등장했습니다. 데이터베이스에 액세스하기 위한 인터페이스가 표준화되면 다양한 데이터베이스 간의 차이점을 숨길 수 있으며 다른 데이터베이스로 전환하는 것이 매우 쉽습니다.
현재 ADODB의 최신 버전은 V4.62로, MySQL, PostgreSQL, Interbase, Informix, Oracle, MS SQL 7, Foxpro, Access, ADO, Sybase, DB2 등 다양한 유형의 데이터베이스를 지원합니다. 일반 ODBC(그 중 PostgreSQL, Informix, Sybase용 드라이버는 자유 소프트웨어 커뮤니티의 개발에 의해 기여되었습니다.)
ADODB를 사용하는 가장 큰 장점 중 하나는 백엔드 데이터베이스가 무엇이든 데이터베이스에 액세스하는 방법이 동일하다는 것입니다. 개발자와 디자이너는 특정 데이터베이스에 대해 다른 액세스 방법을 배울 필요가 없습니다. 개발자의 지식 부담을 크게 줄여줍니다. 과거의 지식은 앞으로도 계속 사용할 수 있습니다. 프로그램 코드는 많이 변경할 필요가 없습니다.
사실 ADODB의 개발 개념은 ADODB보다 먼저 등장한 것이 아닙니다. 데이터베이스에 액세스할 때 Perl에 일관된 API 호출 인터페이스를 제공합니다. Perl DBI를 사용해 본 친구들이 다시 ADODB를 사용하게 되면 친숙하게 느껴질 것이라고 믿습니다.
또한 ADODB는 ASP를 사용해 본 사람들에게 친숙해야 하며, 그런 친구들도 ADODB를 쉽게 받아들일 수 있어야 합니다.
Adodb 공식: http://adodb.sourceforge.net/
PHP는 최소한의 노력으로 가장 재미있게 동적 웹사이트를 구축할 수 있습니다. 동적 웹사이트를 구축하려면 데이터베이스를 사용하여 로그인 계정 정보를 검색해야 합니다. , 토론 포럼에 동적 뉴스를 게시하고 기사를 저장하세요. 귀하의 회사는 가장 다양한 MySQL 데이터를 사용하여 귀하의 웹사이트를 귀하가 상상했던 것보다 더 유명하게 만드는 놀라운 일을 해냈습니다. 그러다가 MySQL이 더 이상 실제 작업 부하를 감당할 수 없다는 사실을 알게 되었고 이제 데이터베이스 시스템을 교체해야 할 때가 되었습니다.
안타깝게도 PHP의 모든 데이터베이스 액세스는 약간 다릅니다. MySQL에 연결하려면 mysql_connect()를 사용합니다. Oracle 또는 Microsoft SQL Server로 업그레이드하기로 결정한 경우 각각 ocilogon() 또는 mssql_connect()를 사용해야 합니다. 더 나쁜 것은 다른 링크에 사용되는 매개 변수도 다르다는 것입니다. 일부 데이터베이스에서는 포타토(감자의 또 다른 발음)라고 합니다.
포기하지 말자
프로그램의 이식성을 보장해야 할 때 ADODB라는 데이터베이스 패키지 링크 라이브러리가 등장했습니다. 지원되는 모든 데이터베이스와 통신할 수 있는 공통 API를 제공하므로 포기할 필요가 없습니다!
ADODB는 Active Data Object DataBase의 약자입니다(죄송합니다! 컴퓨터를 하는 사람들은 가끔 독창적이지 않습니다). ADODB는 현재 MySQL, PostgreSQL, Oracle, Interbase, Microsoft SQL Server, Access, FoxPro, Sybase, ODBC 및 ADO를 지원합니다. http://php.weblogs.com/adodb에서 ADODB를 다운로드할 수 있습니다.
MySQL 예제
PHP에서 가장 일반적인 데이터베이스는 MySQL이므로 localhost에서 MySQL 서버에 연결하고 데이터베이스 이름은 mydab이며 SQL select 명령 쿼리를 실행하는 다음 프로그램 코드가 마음에 드실 것입니다. , 쿼리 결과가 하나씩 인쇄됩니다.
$db = mysql_connect("localhost", "root", "password");
mysql_select_db("mydb",$db)
$result = mysql_query("SELECT * FROM 직원",$ db);
if ($result === false) die("실패")
while ($fields = mysql_fetch_row($result)) {
for ($i=0, $max= sizeof($fields); $i < $max; $i ) {
$fields[$i].'
인쇄
}
위에 나열된 프로그램 코드는 색상이 있는 세그먼트로 나누어져 있습니다. 첫 번째 세그먼트는 링크 부분이고, 두 번째 세그먼트는 SQL 명령을 실행하는 부분이며, 마지막 세그먼트는 while 루프가 각 열을 검색하는 부분입니다. 결과 및 for 루프는 각 열의 필드를 스캔합니다.
다음 단계는 ADODB 프로그램 코드를 사용하여 동일한 결과를 얻는 것입니다.
include("adodb.inc.php")
$db = NewADOConnection('mysql'); db-> ;Connect("localhost", "root", "password", "mydb")
$result = $db->Execute("SELECT * FROM 직원"); result == = false) die("실패");
while (!$result->EOF) {
for ($i=0, $max=$result->FieldCount(); $ i < $max; $i )
$result->필드[$i].'
$result->MoveNext(); ;
}
이제 Oracle 데이터베이스를 가리키도록 변경하세요. 프로그램 코드의 두 번째 줄을 NewADOConnection('oracle')으로 수정하세요.
데이터베이스 연결
include(" adodb.inc.php")
$db = NewADOConnection('mysql')
$db->Connect("localhost", "root" , "password", "mydb");
링크된 프로그램 코드는 원본 MySQL 프로그램 코드보다 더 정교합니다. 더 정교해야 하기 때문입니다. ADODB에서는 객체 지향 접근 방식을 사용하여 다양한 데이터베이스의 복잡성을 관리하고 다양한 클래스를 사용하여 다양한 데이터베이스를 제어합니다.객체 지향 프로그래밍이 처음이더라도 걱정하지 마세요! 모든 복잡성은 NewADOConnection() 함수 뒤에 숨겨져 있습니다.
메모리를 절약하기 위해 연결된 데이터베이스와 관련된 PHP 프로그램 코드만 로드합니다. NewADOConnection(databasedriver)을 호출하여 이를 수행합니다. 합법적인 데이터베이스 드라이버에는 mysql, mssql, oracle, oci8, postgres, sybase가 포함됩니다. , vfp, access, ibase 및 기타 여러 드라이버.
그런 다음 NewADOConnection()을 호출하여 연결 클래스에서 새 객체 엔터티를 생성하고 마지막으로 $db->Connect()를 사용하여 데이터베이스에 연결합니다.
SQL 명령 실행
$result = $db->Execute("SELECT * FROM 직원")
if ($result === false) die("failed"); SQL 명령을 서버로 보냅니다. 성공적으로 실행되면 Execute()가 위에 나열된 대로 레코드세트 개체를 반환합니다.
초보자가 쉽게 혼동할 수 있는 문제는 ADODB에 연결 개체와 레코드세트 개체라는 두 가지 유형의 개체가 있다는 것입니다.
연결 개체($db)는 데이터베이스에 연결하고 SQL 쿼리 형식을 지정하는 역할을 합니다. 레코드세트 개체($result)는 결과를 검색하고 응답 데이터를 텍스트나 배열로 정규화하는 역할을 합니다.
내가 추가할 유일한 점은 ADODB가 INSERT 및 UPDATE 명령을 더 쉽게 만들기 위해 많은 유용한 기능을 제공한다는 것입니다. 이에 대해서는 고급 장에서 언급할 것입니다.
데이터 가져오기
while (!$result->EOF) {
for ($i=0, $max=$result->FieldCount(); $i < $max; $ i )
$result->fields[$i].'
$result->MoveNext()
인쇄
}
데이터를 얻는 이전 예는 파일에서 데이터를 읽는 것과 매우 유사합니다. 먼저 파일의 끝(EOF)에 도달했는지 여부를 확인합니다. 각 열을 입력하고 다음 행(MoveNext)으로 이동한 다음 동일한 작업을 반복합니다.
$result->fields[] 배열은 PHP 데이터베이스 확장 시스템에 의해 생성됩니다. 일부 데이터베이스 확장 시스템은 배열을 필드 이름별로 색인화하지 않습니다. 배열을 이름별로 색인화하려면 $ADODB_FETCH_MODE 일반 변수를 사용하세요. .
$ADODB_FETCH_MODE = ADODB_FETCH_NUM;
$rs1 = $db->Execute('테이블에서 * 선택');
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; '테이블에서 * 선택');
print_r($rs1->fields); // 배열([0]=>'v0',[1] =>'v1')
print_r ($rs2->fields); // array(['col1']=>'v0',['col2'] =>'v1')
위의 예에서 볼 수 있듯이, 두 개의 각 레코드 집합은 저장되고 서로 다른 액세스 모드를 사용합니다. $ADODB_FETCH_MODE는 레코드 집합이 Execute()에 의해 생성된 후에 설정됩니다.
ADOConnection
데이터베이스에 연결하고 SQL 명령을 실행하며 상관 관계 및 날짜 형식 명령과 같은 SQL 명령을 표준 형식으로 지정하는 도구 기능 집합을 포함하는 개체입니다.
기타 유용한 기능
$recordset->Move($pos)는 현재 데이터 열을 스크롤합니다. ADODB는 전체 데이터베이스의 앞으로 스크롤을 지원하지 않습니다. 임시 레코드를 캐시에 사용하여 뒤로 스크롤을 시뮬레이션할 수 있으므로 문제가 되지 않습니다.
$recordset->RecordCount()는 SQL 명령으로 액세스한 레코드 수를 반환합니다. 일부 데이터베이스는 이를 지원하지 않기 때문에 -1을 반환합니다.
$recordset->GetArray()는 결과를 배열 형식으로 반환합니다.
rs2html($recordset) 함수는 전달된 레코드세트를 HTML 테이블 형식으로 변환합니다. 다음 예에서는 관련 사용법이 굵게 표시되어 있습니다.
include('adodb.inc.php')
include('tohtml.inc.php') /* rs2html 함수 포함 */
$conn = &ADONewConnection('mysql');
$conn->PConnect('localhost','userid','password','database')
$rs = $conn->실행 ( 'select * from table');
rs2html($rs); /* 레코드 세트를 html 테이블로 */
파일에 나열된 다른 유용한 기능은 다음 URL에서 찾을 수 있습니다. : //php.weblogs.com/adodb_manual
고급 테마
추가 및 업데이트
다음 데이터를 데이터베이스에 추가한다고 가정해 보겠습니다.
ID = 3
TheDate=mktime(0,0,0,8,31,2001) /* 2001년 8월 31일 */
참고= 설탕, 취소하는 것이 어떨까요
다른 데이터베이스로 전환하면 새 데이터를 추가하지 못할 수도 있습니다.
첫 번째 문제는 각 데이터베이스가 서로 다른 기본 날짜 형식을 갖는다는 것입니다. MySQL은 YYYY-MM-DD 형식을 사용하는 반면, ADODB는 서로 다른 데이터베이스 간에 변환하는 DBDate() 함수를 제공합니다. 사이의 날짜 형식입니다.
다음 문제는 작은따옴표(don't)의 표현입니다. MySQL에서는 작은따옴표(don't)를 직접 사용할 수 있지만 Sybase, Access, Microsoft SQL Server 등 다른 데이터베이스에서는 작은따옴표 두 개를 사용합니다. 따옴표가 사용되면 qstr() 함수가 이 문제를 해결할 수 있음을 나타냅니다.
이 기능을 어떻게 사용하나요? 다음과 같습니다:
$sql = "INSERT INTO 테이블 (id, thedate,note) 값 ("
. $ID . ','
. $db->DBDate($TheDate) . ' ,'
. $db->qstr($Note).")"
$db->Execute($sql)
ADODB에는 $connection->Affected_Rows( ) 함수는 마지막 업데이트 또는 삭제 명령에 의해 영향을 받은 데이터 열의 수를 반환하고, $recordset->Insert_ID() 함수는 마지막 삽입 명령에 의해 자동으로 생성된 데이터 열의 수를 반환합니다. 데이터베이스는 이 두 가지 기능을 제공합니다.
메타 유형
레코드 세트 메소드 FetchField($fieldoffset)(name, type, max_length)를 통해 객체의 세 가지 속성을 반환하여 필드에 대한 자세한 정보를 얻을 수 있습니다.
예:
$recordset = $conn->Execute("테이블에서 날짜 선택");
$f0 = $recordset->FetchField(0)
결과 $f0- >name의 내용은 'adata'이고, $f0->type은 'date'가 되며, max_length를 알 수 없는 경우 해당 내용은 -1이 됩니다.
다른 데이터베이스를 다룰 때 한 가지 문제는 각 데이터베이스가 동일한 데이터 유형에 대해 서로 다른 이름을 갖는다는 것입니다. 예를 들어 타임스탬프 유형은 한 데이터베이스에서는 datetime이라고 하고 다른 데이터베이스에서는 time이라고 하므로 ADODB는 MetaType($type, $max_length) 함수를 사용하여 다음 데이터 유형을 표준화합니다.
C: 문자 및 varchar 유형
X: 텍스트 또는 긴 문자(예: 255바이트 초과) B: blob 또는 바이너리 이미지
D: 날짜
T: 타임스탬프
L: 논리(부울)
I: 정수
N: 숫자(float, double, Money)
앞의 예에서는
$recordset = $conn->Execute("테이블에서 날짜 선택")
$f0 = $recordset->FetchField(0)
$type = $recordset-> ;MetaType($f0- >type, $f0->max_length);
print $type; /* 'D'를 인쇄해야 합니다. */
Select 명령에 대한 제한 및 상위 지원
ADODB에는 $connection->SelectLimit이 있습니다. ($sql,$nrows,$offset) 함수를 사용하면 레코드 세트의 부분 컬렉션을 검색할 수 있습니다. 이는 Microsoft 제품의 SELECT TOP 사용법과 PostgreSQL 및 MySQL의 SELECT...LIMIT 장점을 기반으로 합니다. 원본 데이터베이스는 이 사용법을 제공하지 않으므로 이 기능도 이 사용법 제공을 시뮬레이션합니다.
캐시 지원
ADODB를 사용하면 파일 시스템에 레코드 세트 데이터를 임시로 저장하고 $connection->CacheExecute($secs2cache,$sql) 및 $connection->CacheSelectLimit($secs2cache에서 다음 기능을 수행할 수 있습니다. , $sql, $nrows, $offset) 및 기타 설정된 시간 간격은 시간을 절약하기 위해 실제로 데이터베이스를 쿼리하기 전에 도달됩니다.
PHP4 세션 지원
ADODB는 PHP4 세션 핸들러도 지원합니다. 세션 변수를 데이터베이스에 저장할 수 있습니다. 관련 기능은 http://php.weblogs.com/adodb-sessions를 참조하세요.
장려하세요. 상업적 사용
판매용 상용 PHP 응용 프로그램 소프트웨어를 작성하려는 경우 ADODB를 사용할 수도 있습니다. 우리는 GPL에 따라 ADODB를 게시하므로 상용 응용 프로그램 소프트웨어에서 이를 합법적으로 인용하고 프로그램 코드의 소유권을 유지할 수 있습니다. ADODB의 상업적 사용을 적극 권장하며, 이러한 이유로 내부적으로 사용하고 있습니다.
이상은 adodb.recordset의 내용을 포함하여 adodb.recordset php adodb에 대한 소개를 소개하고 있는데, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되었으면 좋겠습니다.