반응형
블로그 이미지
개발자로서 현장에서 일하면서 새로 접하는 기술들이나 알게된 정보 등을 정리하기 위한 블로그입니다. 운 좋게 미국에서 큰 회사들의 프로젝트에서 컬설턴트로 일하고 있어서 새로운 기술들을 접할 기회가 많이 있습니다. 미국의 IT 프로젝트에서 사용되는 툴들에 대해 많은 분들과 정보를 공유하고 싶습니다.
솔웅

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

카테고리

Kurogo Tutorial 16 - Database Access -

2012. 5. 30. 10:43 | Posted by 솔웅


반응형

Database Access

데이터베이스가 필요한 경우는 여럿 있습니다. Kurogo는 PDO pho library를 사용하는 표준 데이타베이스 access abstraction system을 만들었습니다. 이 section에서는 데이터베이스 connection에 대한 configuration 뿐만 아니라 모듈이나 library를 만들 때 어떻게 데이터베이스를 활용하는지에 대한 설명도 있습니다.

Supported Database Backends

Kurogo는 다음과 같은 부분을 지원합니다. 이 시스템을 사용하시려면 PHP extention 이 요구된다는 것을 기억해 두세요. 데이터베이스 서버를 설치하고 configuring 하는것은 이 문서에서는 따로 다루지 않겠습니다.



An important note about SQL statements

Kurogo 데이터베이스 라이브러리는 단지 abstraction library 에 접속하는 일만 합니다. 이것은 SQL abstract library 가 아니기 때문에 서로 다른 backend 시스템이 하나의 SQL language를 지원하지 않구요 거기에 맞는 statement를 사용해야 하는 겁니다. SQL 구문이 반드시 다르게 되는 back ends 들에 대한 정보는 Using the database access library 를 보세요.

Kurogo Features that use Database connections

  •  internal device detection system은 브라우저에 데이터를 저장하기 위해 내장된 SQLite 데이터베이스를 사용합니다.
  • Statistics Modules 은 access log들을 index 하고 report를 준비하기 위해 데이터베이스를 사용합니다. 여러분 환경이 load balance 된 환경이라면 centralized 데이터베이스를 사용하시는게 좋을 겁니다.
  • 옵션으로 세션데이터를 저장하려면 SessionDB 클래스를 사용해서 서버에 파일로 저장할 게 아니라 데이터베이에 저장하는 것이 좋습니다.
  • DatabasePeopleController는 디렉토리 정보를 얻기 위해 데이터베이스를 사용합니다. (LDAP 서버를 사용하지 않고 데이터베이스를 사용하는 겁니다.)
  • DatabaseAuthentication authority 는 authentication을 위해 데이터베이스를 사용합니다.

이 기능들을 사용하시려면 데이터베이스만 있으면 됩니다. 데이터베이스를 사용하지 않아도 Kurogo를 사용할 수는 있습니다.

Configuring Database Connections

site.ini 파일의  database 섹션에는 데이터베이스 connection setting의 primary set 이 있습니다. 모든 데이터베이스 커넥션들은 디폴트로 series of setting을 사용할 겁니다. 여러분들은 특정 서비스의 configuration마다 적당한 값들을 사용함으로서 이러한 세팅들을 override 하실 수 있습니다.

  • DB_DEBUG - on 이면 쿼리들은 log 되고 에러들은 브라우져에 보여집니다. production site에서는 off로 해 두셔야 합니다. 그렇지 않으면 데이터베이스 에러가 있을 때 SQL 쿼리가 노출 될 수 있습니다.
  • DB_TYPE - 데이터베이스 시스템의 종류. 아래와 같은 것들이 있습니다.
    • mysql
    • sqlite
    • pgsql
    • mssql

아래 값들은 host based 시스템들에 적합합니다. (mysql, pgsql and mssql)

  • DB_HOST - The hostname/ip address of the database server.
  • DB_USER - The username needed to connect to the server
  • DB_PASS - The password needed to connect to the server
  • DB_DBNAME - The database where the tables are located
  • DB_PORT - The port used to connect to the server. If empty it will use the default (mysql and pgsql only)

The following values are valid for file based systems (sqlite)

아래 값은 file based systems 에 적용됩니다. (sqlite)

  • DB_FILE - 데이터베이스 파일의 위치. Use the DATA_DIR constant to save the file in the site data dir. This folder is well suited for these files.

Using the database access library

데이터베이스 접근이 요구되는 모듈을 만든다면 여러분 코드를 간단하게 하고 같은 데이터베이스 접근을 쉽게 하기 위해 데이터베이스 클래스를 활용하실 수 있습니다.

  • Include the db package: Kurogo::includePackage(‘db’);
  • Instantiate a db object with arguments, the arguments should be an associative array that contains the appropriate configuration parameters. If the argument is blank then it will use the default settings found in the database section of site.ini
  • Use the query($sql, $arguments) method to execute a query. The arguments array is sent as prepared statement bound parameters. In order to prevent SQL injection attacks you should utilize bound parameters rather than including values in the SQL statement itself
  • The query method will return a PDOStatement object. You can use the fetch method to return row data.
  • The lastInsertID method of the db object will return the ID of the last inserted row.
<?php

Kurogo::includePackage('db');

class MyClass
{
    function myMethod() {

        $db = new db();

        $sql = "SELECT * FROM sometable where somefield=? and someotherfield=?";
        $result = $db->query($sql, array('value1','value2'));
        while ($row = $result->fetch()) {
            // do something
        }
    }
}



반응형