커피닉스, 시스템 엔지니어의 쉼터 커피향이 나는 *NIX
커피닉스
시스템/네트웍/보안을 다루는 곳
* HanIRC의 #coffeenix 방
[ 장비 및 회선 후원 ]
HOME > 프로그래밍 / 개발 > 웹 프로그래밍 / PHP 도움말
검색 : 사이트 WHOIS 웹서버 종류


  SQLite 와 php 의 연동 작성일 : 2003/10/28 21:57
 
  • 글쓴이 : 카폐인 ( http://nonots.unixedu.org/ )
  • 조회수 : 13140
          [ 이전화면 / 수정 ]   비밀번호 :     인쇄용 화면
      ####################################################
    ### PHP 에서 SQLite DB 사용하기
    ### 2003/10/28 권기성 : nonots@hanmail.net
    ####################################################

    1. 개요

        SQLite 의 특징이라면, 설치및 사용이 간단하다는점
        작고 빠르다는 점, SQL92 라는 표준을 따르므로 다른 DBMS 와 유사한
        SQL 문을 사용한다는점, 별도의 데몬 프로세스가 떠있지 않다는 점,
        PHP 5 부터 적극 지원된다는점,,    등을 들 수 있습니다.

        아직 지원되지 않는 기능은 http://sqlite.org/omitted.html 에  있습니다.
        이중에서도 Alter table 이 안된다는게 참 불편하군요..

        간단하게 제가 사용해본 SQLite 의 사용법을 보여드리겠습니다.


    2. SQLite 설치

        - 경로 :  http://sqlite.org/download.html - 여기 가면  윈도우용, 리눅스용이 있습니다.
        - 제경우 리눅스용 sqlite-2.8.6 과 sqlite-devel-2.8.6 RPM 을 다운 받아
        설치했습니다.. 환경설정파일 같은 것도 없고. 데몬을 띄우는 것도 필요 없습니다.
        그냥 rpm 으로 깔면 끝입니다.
        - 아래는 간단한 사용례 입니다.


    $ sqlite test_db
    SQLite version 2.8.6
    Enter ".help" for instructions
    sqlite>
            쉘에서  이렇게만 하면 현재 디렉토리에 test_db 라는 파일이 하나 만들어집니다.
            이 파일(DB)을 php에서 사용하려면 당연히 웹서버가 읽고 쓸수 있는 권한이 있어야
            합니다.

    sqlite> create table test_tb ( id int PRIMARY KEY, name varchar(30));
            테이블 test_tb 를 만듭니다.
    sqlite> .tables  //테이블목록 보기
    test_tb
    sqlite> .schema test_tb  // 테이블의 구조를 봅니다.
    create table test_tb ( id int PRIMARY KEY, name varchar(30));
    sqlite> insert into test_tb values ( 1,'권기성');
    // AUTO_INCREMENT 기능하는 INSERT
    sqlite> insert into test_tb values((SELECT max(id) FROM test_tb)+1,'권기성2');
    sqlite> select * from test_tb;
    1|권기성
    2|권기성2

    sqlite> create index name_idx on test_tb (name)  ; //인덱스 만들기

    sqlite> begin ; //트랜잭션도 가능
    sqlite> insert into test_tb values ( 3,'김기성');
    sqlite> select  * from test_tb;
    1|권기성
    2|권기성2
    3|김기성
    sqlite> rollback; //롤백
    sqlite> select * from test_tb;
    1|권기성
    2|권기성2

    sqlite> .output backup.txt //다음줄 select 의 결과가 backup.txt 파일로 저장됨
    sqlite> select * from test_tb ;
    sqlite> .exit //종료

    // 쉘에서 test_db 를 dump 받아서 압축함 ( mysqldump 와 비슷 )
    $ echo '.dump' | sqlite test_db | gzip -c > test_db.dump.gz //백업하기
    $ zcat test_db.dump.gz | sqlite test_db  //복원하기



    3. PHP 에서 모듈설치

        - PHP 5 베타 :  --with-sqlite 옵션을 주고 컴파일합니다.
            (참고로 php 5 에서는 mysql 을 사용하려면 반드시 --with-mysql 을 줘야합니다.)
            컴파일후 pearDB 를 사용하려면  이 경우도
            # pear install SQLite  명령어로 sqlite 패키지를 설치해야할겁니다.(아마)

        - PHP 4.3.3 : 제경우 4.3.3 에서 테스트 했습니다. 최소 가능 버전이 얼마인지는 모르겠습니다.
            이경우 php 의 최초 컴파일시 --with-sqlite 라는 옵션자체가 없습니다.
            그러므로 일반적으로 php 컴파일 해서 설치한 후 나중에
            PEAR 패키지로 따로 설치를 해야합니다. 리눅스 쉘에서 루트 권한으로

            # pear install SQLite

            라고 하면  패키지를 자동으로 다운 받아서 소스 풀고 한참  컴파일 합니다.
            결과적으로 {PHP설치위치}/extensions/no-debug-non-zts-20020429 와 같은 디렉토리에
            sqlite.so 라는 so 파일이 하나생깁니다.
            이파일을 {PHP설치위치}/extensions/ 로 복사한후
            php.ini 파일에서

            extension=sqlite.so

            와 같이 동적 모듈을 사용하도록 수정합니다.
            조심할 점은 php.ini 에서 extension_dir 이  제대로 설정되거나 아니면  주석처리되어
            디폴트 위치를 찾도록 해야합니다.

            이렇게 한후 웹서버를 재시작하고,  phpinfo() 로 봤을때 sqlite 항목이 나오면 제대로
            설치가 된겁니다.

        - PEAR DB
            위에서 pear install SQLite 명령시 pear  패키지로 자동 설치하며
            {PHP설치위치}/php/DB/sqlite.php 라는 파일로 저장됩니다.
            이 파일을 통해서 sqlite 도 PEAR DB 에서 간편하게 사용가능합니다.



    4. PHP 소스

        - 간단한 사용법은 아래와 같습니다. DB 연결부분은 쉽게 이해가 가실겁니다.
        - 실패하기 제일 쉬운 이유는 DB 인 test_db 라는 파일의 경로가 제대로 설정되어야하고
        웹서버가 읽고 쓸수 있는 권한이 주어져야합니다.

        <?php
        // PEAR DB 연결
        require_once 'DB.php';
        require_once 'DB/sqlite.php';

        // DSN 정의 - DB 파일의 경로와 퍼미션 주의
        $dsn = array (
            'phptype'   => "sqlite", 'database'  => "./test_db",
            'mode'      => 0644
        );
        $db = &new DB_sqlite();
        $db->connect($dsn, array('persistent'=> true) );
        $table = 'test_tb'; // 테이블명

        //입력
        $result = $db->query("INSERT INTO $table VALUES (9,'아무개');");

        printf("affectedRows:\t\t%s\n<br>", $db->affectedRows() );
        printf("getLastInsertId:\t%s\n<br>", $db->getLastInsertId() );
        $result = $db->query("SELECT * FROM $table;" );
        while($row = $db->fetchrow($result)){
            print_r($row ); echo "<br>";
        }
        $db->disconnect();
        ?>



    5. 기타

        - http://www.sqlite.org 와 그곳에 있는 링크들의 정보를 참조하세요..

        - sqlite 관리툴은 sf.net 에서 sqlite 라는 검색어로 찾아보면 몇개 있습니다.
            http://sourceforge.net/projects/sqlite-admin/ 이것은 phpMyadmin 비슷한 php 관리툴인데
            단점은 php5 가 필요합니다.
            http://sourceforge.net/projects/sqlitebrowser/ 이것은 Qt 로된 리눅스용 GUI 입니다.

        - 위의 사용예에서 보인 pear DB 를 사용하지  않고 ,그냥 php 의 sqlite 함수를 이용하려면
           http://kr.php.net/manual/kr/ref.sqlite.php 이곳을 참조하세요..
      커피닉스 카페 최근 글
    [11/06] World News Digest:
    [06/16] [질문]SAN 스위치 브로드케이드 dcx8510-4 장비관련입니다.
    [04/22] Re: 영화속에 컴퓨터 이야기 ~스워드피쉬(2001)
    [10/20] Cross Compiler 깔
    [07/14] SSL АО
    [04/26] Re: 도스화면 원격조종 여부
    [04/25] 도스화면 원격조종 여부
    [10/30] Cshell에서 난수 설정
    [10/23] 공항철도주식회사 SE 구인 件
    [01/26] Re: wget으로 다른서버에있는 디렉토리를 가져오려고합니다.
    [01/25] wget으로 다른서버에있는 디렉토리를 가져오려고합니다.
    [01/11] 특정 안드로이드 WebView 버전에서 SSL 문제 (WebView 버그)
    [08/01] DNS forwarder (전달자) 서버를 통해서 쿼리하면 역방향을 받아오질 못합니다.
    [05/16] (주)후이즈 시스템엔지니어 (경력자) 모집
    [02/15] [AWS] Cloudfront edge 확인하기
      New!   최근에 등록한 페이지
      KiCad EDA Suite project (Free/Libre/Open-Source EDA Suite) (CAD)
      오픈캐스케이드 캐드 (OpenCASCADE CAD)
      QCad for Windows --- GNU GPL (Free Software)
      The Hello World Collection
      IPMI를 활용한 리눅스 서버관리
      DNS 설정 검사
      nagiosgraph 설치 방법
      Slony-I 설치 방법 (postgresql replication tool)
      Qmail기반의 Anti spam 시스템 구축하기
      clusterssh

    [ 함께하는 사이트 ]




    운영진 : 좋은진호(truefeel), 야수(yasu), 범냉이, sCag
    2003년 8월 4일~