:meta-keywords: cubrid pdo driver, cubrid php data objects, cubrid pdo api, pdo programming, pdo sample :meta-description: The official CUBRID PHP Data Objects (PDO) driver is available as a PECL package and it implements the PDO interface to enable access from PDO to CUBRID.PDO is available with PHP 5.1. CUBRID PDO driver is based on CCI API. ************ PDO 드ë¼ì´ë²„ ************ ê³µì‹ CUBRID PDO(PHP Data Objects) 드ë¼ì´ë²„는 PECL 패키지로 ì œê³µë˜ë©°, PDOì—서 CUBRID ë°ì´í„°ë² ì´ìŠ¤ì— ì ‘ê·¼í• ìˆ˜ 있ë„ë¡ PDO ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ ì œê³µí•œë‹¤. PDO는 PHP 5.1ê³¼ 함께 ë°°í¬ë˜ë©°, PHP 5.0ì—서는 PECL 확장으로 ì‚¬ìš©í• ìˆ˜ 있다. PDO를 ì‚¬ìš©í•˜ë ¤ë©´ PHP 5 ì½”ì–´ì˜ OO ê¸°ëŠ¥ì´ í•„ìš”í•˜ë¯€ë¡œ, PHP 5.0 미만 ë²„ì „ì—서는 ì‚¬ìš©í• ìˆ˜ 없다. PDO는 ì–´ë–¤ ë°ì´í„°ë² ì´ìŠ¤ë¥¼ ì‚¬ìš©í•˜ë“ ê°™ì€ í•¨ìˆ˜ë¥¼ ì‚¬ìš©í• ìˆ˜ 있게 하는 ë°ì´í„° 액세스 ì¶”ìƒí™” 계층(data-access abstraction layer)ì„ ì œê³µí•˜ë©°, ë°ì´í„°ë² ì´ìФ ì¶”ìƒí™”를 ì œê³µí•˜ëŠ” ê²ƒì€ ì•„ë‹ˆë‹¤. PDO를 ë°ì´í„°ë² ì´ìФ ì¸í„°íŽ˜ì´ìФ 계층으로 사용하면 PHP ë°ì´í„°ë² ì´ìФ 드ë¼ì´ë²„를 바로 사용하는 ê²½ìš°ì— ë¹„í•´ 다ìŒê³¼ ê°™ì€ ì´ì ì´ ìžˆë‹¤. * 작성한 PHP 코드를 다양한 ë°ì´í„°ë² ì´ìŠ¤ì™€ 함께 ì‚¬ìš©í• ìˆ˜ 있다. * SQL 파ë¼ë¯¸í„°ì™€ ë°”ì¸ë”©ì„ ì§€ì›í•œë‹¤. * SQLì„ ë” ì•ˆì „í•˜ê²Œ ì‚¬ìš©í• ìˆ˜ 있다(구문 검사, ì´ìŠ¤ì¼€ì´í”„, SQL ì¸ì ì…˜ ë°©ì§€ 등). * í”„ë¡œê·¸ëž˜ë° ëª¨ë¸ì´ 간결해진다. ë”°ë¼ì„œ CUBRID PDO 드ë¼ì´ë²„를 사용하면, ë°ì´í„°ë² ì´ìФ ì¸í„°íŽ˜ì´ìФ 계층으로 PDO를 사용하는 ëª¨ë“ ì‘ìš© í”„ë¡œê·¸ëž¨ì€ CUBRID와 함께 ì‚¬ìš©í• ìˆ˜ 있다. CUBRID PDO 드ë¼ì´ë²„는 CCI API를 기반으로 작성ë˜ì—ˆìœ¼ë¯€ë¡œ, CCI API ë° CCIì— ì ìš©ë˜ëŠ” **CCI_DEFAULT_AUTOCOMMIT**\ ê³¼ ê°™ì€ ì„¤ì • 파ë¼ë¯¸í„°ì— ì˜í–¥ì„ 받는다. .. FIXME: 별ë„로 PDO 드ë¼ì´ë²„를 다운로드하거나 PDO 드ë¼ì´ë²„ì— ëŒ€í•œ ìµœì‹ ì •ë³´ë¥¼ 확ì¸í•˜ë ¤ë©´ http://www.cubrid.org/wiki_apis/entry/cubrid-pdo-driver\ ì— ì ‘ì†í•œë‹¤. PDO 설치 ë° ì„¤ì • ================ Linux ----- **기본 환경** * ìš´ì˜ì²´ì œ: Linux: 32 비트 ë˜ëŠ” 64비트 * 웹 서버: Apache * PHP: 5.6.x, 7.1.x, ë˜ëŠ” 7.4.x (https://www.php.net/downloads.php) **PECLì„ ì´ìš©í•œ 설치** **PECL**\ ì´ ì„¤ì¹˜ë˜ì–´ 있다면, **PECL**\ ì´ ì†ŒìŠ¤ì½”ë“œ 다운로드 ë° ì»´íŒŒì¼ì„ 수행하므로 다ìŒê³¼ ê°™ì´ ê°„ë‹¨í•˜ê²Œ CUBRID PDO 드ë¼ì´ë²„를 ì„¤ì¹˜í• ìˆ˜ 있다. .. FIXME: **PECL**\ ì´ ì„¤ì¹˜ë˜ì–´ìžˆì§€ 않다면 http://www.cubrid.org/wiki_apis/entry/installing-cubrid-php-driver-using-pecl\ ì„ ì°¸ê³ í•˜ì—¬ PECLì„ ì„¤ì¹˜í•œë‹¤. #. 다ìŒê³¼ ê°™ì€ ëª…ë ¹ì–´ë¥¼ ìž…ë ¥í•˜ì—¬ CUBRID PDO 드ë¼ì´ë²„ ìµœì‹ ë²„ì „ì„ ì„¤ì¹˜í•œë‹¤. :: sudo pecl install pdo_cubrid 하위 ë²„ì „ì˜ ë“œë¼ì´ë²„ê°€ 필요하면 다ìŒê³¼ ê°™ì´ ì„¤ì¹˜í• ë²„ì „ì„ ì§€ì •í• ìˆ˜ 있다. :: sudo pecl install pdo_cubrid-8.3.1.0003 설치가 ì§„í–‰ë˜ëŠ” ì¤‘ì— **CUBRID base install dir autodetect :**\ ë¼ëŠ” 프롬프트가 표시ëœë‹¤. 설치를 ì›í™œí•˜ê²Œ 진행하기 위해서 CUBRID를 설치한 ë””ë ‰í„°ë¦¬ì˜ ì „ì²´ 경로를 ìž…ë ¥í•œë‹¤. 예를 들어 CUBRIDê°€ **/home/cubridtest/CUBRID** ë””ë ‰í„°ë¦¬ì— ì„¤ì¹˜ë˜ì—ˆë‹¤ë©´, **/home/cubridtest/CUBRID**\ 를 ìž…ë ¥í•œë‹¤. #. ì„¤ì • 파ì¼ì„ ìˆ˜ì •í•œë‹¤. * CentOS 6.0 ì´ìƒ ë²„ì „ì´ë‚˜ Fedora 15 ì´ìƒ ë²„ì „ì„ ì‚¬ìš©í•œë‹¤ë©´ **pdo_cubrid.ini** 파ì¼ì„ ìƒì„±í•˜ê³ ë‚´ìš©ì— **extension=pdo_cubrid.so** 를 ìž…ë ¥í•˜ì—¬ **/etc/php.d** ë””ë ‰í„°ë¦¬ì— ì €ìž¥í•œë‹¤. * 다른 ìš´ì˜ì²´ì œë¥¼ 사용한다면 **php.ini** íŒŒì¼ ëì— ë‹¤ìŒ ë‘ ì¤„ì˜ ë‚´ìš©ì„ ì¶”ê°€í•œë‹¤. **php.ini** 파ì¼ì˜ 기본 위치는 **/etc/php5/apache2** ë˜ëŠ” **/etc** ì´ë‹¤. :: [CUBRID] extension=pdo_cubrid.so #. ë³€ê²½ëœ ë‚´ìš©ì„ ë°˜ì˜í•˜ë ¤ë©´ 웹 서버를 재시작한다. Windows ------- **기본 환경** * ìš´ì˜ì²´ì œ: Windows 32 비트 ë˜ëŠ” 64비트 * 웹 서버: Apache ë˜ëŠ” IIS * PHP: 5.6.x, 7.1.x ë˜ëŠ” 7.4.x(https://windows.php.net/download/) * PHP 7.1.x ë˜ëŠ” 7.4.x ì˜ ê²½ìš° 32bit ë˜ëŠ” 64bitìš© Microsoft Visual C ++ 2015 ìž¬ë°°í¬ ê°€ëŠ¥ 패키지를 설치해야 한다. **ë¹Œë“œëœ ë“œë¼ì´ë²„ 다운로드 ë° ì„¤ì¹˜** ìš´ì˜ì²´ì œì™€ PHP ë²„ì „ì— ë§žëŠ” Windowsìš© CUBRID PHP/PDO 드ë¼ì´ë²„를 https://www.cubrid.org/downloads#pdo ì—서 다운로드한다. PDO 드ë¼ì´ë²„를 다운로드하면 **php_cubrid.dll** 파ì¼ì„ ë³¼ 수 있으며, PDO 드ë¼ì´ë²„를 다운로드하면 **php_pdo_cubrid.dll** 파ì¼ì„ ë³¼ 수 있다. 드ë¼ì´ë²„를 설치하는 ë°©ë²•ì€ ë‹¤ìŒê³¼ 같다. #. 드ë¼ì´ë²„ 파ì¼ì„ 기본 PHP 확장 ë””ë ‰í„°ë¦¬( **C:\\Program Files\\PHP\\ext** )ì— ë³µì‚¬í•œë‹¤. #. 시스템 환경 변수를 ì„¤ì •í•œë‹¤. 시스템 환경 변수 **PHPRC**\ ì˜ ê°’ìœ¼ë¡œ **C:\\Program Files\\PHP**\ ê°€ ì„¤ì •ë˜ê³ , **Path**\ ì— **%PHPRC%**\ 와 **%PHPRC%\\ext**\ ê°€ 추가ë˜ì—ˆëŠ”ì§€ 확ì¸í•œë‹¤. #. **php.ini** ( **C:\\Program Files\\PHP\\php.ini** ) 파ì¼ì„ ì—´ì–´ ëì— ë‹¤ìŒ ë‘ ì¤„ì„ ì¶”ê°€í•œë‹¤. :: [PHP_CUBRID] extension=php_cubrid.dll PDO 드ë¼ì´ë²„ì˜ ê²½ìš°ì—는 ë‹¤ìŒ ë‚´ìš©ì„ ì¶”ê°€í•œë‹¤. :: [PHP_PDO_CUBRID] extension = php_pdo_cubrid.dll #. 웹 서버를 재시작한다. PHP 드ë¼ì´ë²„ 빌드 ================= CUBRID PDO 드ë¼ì´ë²„를 빌드하는 ë°©ë²•ì€ :ref:`CUBRID PHP 드ë¼ì´ë²„를 빌드하는 방법<how-to-php-driver-build>`\ê³¼ ë™ì¼í•˜ë¯€ë¡œ ì°¸ê³ í•˜ì—¬ 진행한다. PDO í”„ë¡œê·¸ëž˜ë° ============== .. _pdo-dsn: ë°ì´í„° ì›ë³¸ ì´ë¦„(DSN) --------------------- PDO_CUBRID ë°ì´í„° ì›ë³¸ ì´ë¦„(DSN)ì€ ë‹¤ìŒê³¼ ê°™ì€ ìš”ì†Œë¡œ 구성ëœë‹¤. +-------------+-------------------------------------------------------+ | 요소 | 설명 | +=============+=======================================================+ | DSN ì ‘ë‘ì–´ | DSN ì ‘ë‘ì–´(prefix)는 **cubrid** ì´ë‹¤. | +-------------+-------------------------------------------------------+ | host | ë°ì´í„°ë² ì´ìФ 서버가 위치한 í˜¸ìŠ¤íŠ¸ì˜ ì´ë¦„ì„ ìž…ë ¥í•œë‹¤. | +-------------+-------------------------------------------------------+ | port | ë°ì´í„°ë² ì´ìФ ì„œë²„ì˜ ìˆ˜ì‹ ëŒ€ê¸° í¬íЏ 번호를 ìž…ë ¥í•œë‹¤. | +-------------+-------------------------------------------------------+ | dbname | ë°ì´í„°ë² ì´ìŠ¤ì˜ ì´ë¦„ì„ ìž…ë ¥í•œë‹¤. | +-------------+-------------------------------------------------------+ **ì˜ˆì œ** :: "cubrid:host=127.0.0.1;port=33000;dbname=demodb" 미리 ì •ì˜ëœ ìƒìˆ˜ ---------------- CUBRID PDO 드ë¼ì´ë²„ì— ì˜í•´ ì •ì˜ë˜ëŠ” ìƒìˆ˜(predefined constants)는 CUBRID PDO 드ë¼ì´ë²„ê°€ PHP와 함께 컴파ì¼ë˜ê±°ë‚˜ ëŸ°íƒ€ìž„ì— ë™ì 으로 로드ë˜ëŠ” 경우ì—ë§Œ ì‚¬ìš©í• ìˆ˜ 있다. ì´ì²˜ëŸ¼ íŠ¹ì • 드ë¼ì´ë²„ì— ì˜í•´ ì •ì˜ëœ ìƒìˆ˜ë¥¼ 다른 드ë¼ì´ë²„와 함께 사용하면 예ìƒê³¼ 다르게 ë™ìž‘í• ìˆ˜ë„ ìžˆë‹¤. 코드가 여러 ê°œì˜ ë“œë¼ì´ë²„와 함께 실행ë 수 있다면, **PDO_ATTR_DRIVER_NAME** ì†ì„± ê°’ì„ ì–»ì–´ 드ë¼ì´ë²„를 확ì¸í•˜ê¸° 위해 `PDO::getAttribute() <http://docs.php.net/manual/en/pdo.getattribute.php>`_ 함수를 ì‚¬ìš©í• ìˆ˜ 있다. ë‹¤ìŒ ìƒìˆ˜ëŠ” `PDO::cubrid_schema <https://www.php.net/manual/en/pdo.cubrid-schema.php>`_ () 함수를 ì´ìš©í•˜ì—¬ 스키마 ì •ë³´ë¥¼ ì–»ì„ ë•Œ ì‚¬ìš©í• ìˆ˜ 있다. +------------------------------------+---------+---------------------------------------------------------------------------------------------------+ | ìƒìˆ˜ | 타입 | 설명 | +====================================+=========+===================================================================================================+ | PDO::CUBRID_SCH_TABLE | integer | CUBRID í…Œì´ë¸”ì˜ ì´ë¦„ê³¼ íƒ€ìž…ì„ ì–»ëŠ”ë‹¤. | +------------------------------------+---------+---------------------------------------------------------------------------------------------------+ | PDO::CUBRID_SCH_VIEW | integer | CUBRID ë·°ì˜ ì´ë¦„ê³¼ íƒ€ìž…ì„ ì–»ëŠ”ë‹¤. | +------------------------------------+---------+---------------------------------------------------------------------------------------------------+ | PDO::CUBRID_SCH_QUERY_SPEC | integer | ë·°ì˜ ì¿¼ë¦¬ ì •ì˜ë¥¼ 얻는다. | +------------------------------------+---------+---------------------------------------------------------------------------------------------------+ | PDO::CUBRID_SCH_ATTRIBUTE | integer | í…Œì´ë¸” ì¹¼ëŸ¼ì˜ ì†ì„±ì„ 얻는다. | +------------------------------------+---------+---------------------------------------------------------------------------------------------------+ | PDO::CUBRID_SCH_TABLE_ATTRIBUTE | integer | í…Œì´ë¸”ì˜ ì†ì„±ì„ 얻는다. | +------------------------------------+---------+---------------------------------------------------------------------------------------------------+ | PDO::CUBRID_SCH_TABLE_METHOD | integer | ì¸ìŠ¤í„´ìŠ¤ 메서드를 얻는다. ì¸ìŠ¤í„´ìŠ¤ 메서드는 í´ëž˜ìФ ì¸ìŠ¤í„´ìŠ¤ê°€ 호출하는 메서드ì´ë‹¤. | | | | ëŒ€ë¶€ë¶„ì˜ ìž‘ì—…ì€ ì¸ìŠ¤í„´ìŠ¤ì—서 실행ë˜ê¸° ë•Œë¬¸ì— ì¸ìŠ¤í„´ìŠ¤ 메서드는 í´ëž˜ìФ 메서드보다 ìžì£¼ 사용ëœë‹¤. | +------------------------------------+---------+---------------------------------------------------------------------------------------------------+ | PDO::CUBRID_SCH_METHOD_FILE | integer | í…Œì´ë¸”ì˜ ë©”ì„œë“œê°€ ì •ì˜ëœ 파ì¼ì˜ ì •ë³´ë¥¼ 얻는다. | +------------------------------------+---------+---------------------------------------------------------------------------------------------------+ | PDO::CUBRID_SCH_SUPER_TABLE | integer | 현재 í…Œì´ë¸”ì— ì†ì„±ì„ ìƒì†í•œ í…Œì´ë¸”ì˜ ì´ë¦„ê³¼ íƒ€ìž…ì„ ì–»ëŠ”ë‹¤. | +------------------------------------+---------+---------------------------------------------------------------------------------------------------+ | PDO::CUBRID_SCH_SUB_TABLE | integer | 현재 í…Œì´ë¸”로부터 ì†ì„±ì„ ìƒì†ë°›ì€ í…Œì´ë¸”ì˜ ì´ë¦„ê³¼ íƒ€ìž…ì„ ì–»ëŠ”ë‹¤. | +------------------------------------+---------+---------------------------------------------------------------------------------------------------+ | PDO::CUBRID_SCH_CONSTRAINT | integer | í…Œì´ë¸”ì˜ ì œì•½ ì¡°ê±´ì„ ì–»ëŠ”ë‹¤. | +------------------------------------+---------+---------------------------------------------------------------------------------------------------+ | PDO::CUBRID_SCH_TRIGGER | integer | í…Œì´ë¸”ì˜ íŠ¸ë¦¬ê±°ë¥¼ 얻는다. | +------------------------------------+---------+---------------------------------------------------------------------------------------------------+ | PDO::CUBRID_SCH_TABLE_PRIVILEGE | integer | í…Œì´ë¸”ì˜ ê¶Œí•œ ì •ë³´ë¥¼ 얻는다. | +------------------------------------+---------+---------------------------------------------------------------------------------------------------+ | PDO::CUBRID_SCH_COL_PRIVILEGE | integer | ì¹¼ëŸ¼ì˜ ê¶Œí•œ ì •ë³´ë¥¼ 얻는다. | +------------------------------------+---------+---------------------------------------------------------------------------------------------------+ | PDO::CUBRID_SCH_DIRECT_SUPER_TABLE | integer | 현재 í…Œì´ë¸”ì˜ ë°”ë¡œ ìƒìœ„ í…Œì´ë¸”ì„ ì–»ëŠ”ë‹¤. | +------------------------------------+---------+---------------------------------------------------------------------------------------------------+ | PDO::CUBRID_SCH_DIRECT_PRIMARY_KEY | integer | í…Œì´ë¸”ì˜ ê¸°ë³¸í‚¤ë¥¼ 얻는다. | +------------------------------------+---------+---------------------------------------------------------------------------------------------------+ | PDO::CUBRID_SCH_IMPORTED_KEYS | integer | í…Œì´ë¸”ì˜ ì™¸ëž˜í‚¤ê°€ 참조하는 기본키를 얻는다. | +------------------------------------+---------+---------------------------------------------------------------------------------------------------+ | PDO::CUBRID_SCH_EXPORTED_KEYS | integer | í…Œì´ë¸”ì˜ ê¸°ë³¸í‚¤ë¥¼ 참조하는 외래키를 얻는다. | +------------------------------------+---------+---------------------------------------------------------------------------------------------------+ | PDO::CUBRID_SCH_CROSS_REFERENCE | integer | ë‘ í…Œì´ë¸” ê°„ì˜ ìƒí˜¸ 참조 관계를 얻는다. | +------------------------------------+---------+---------------------------------------------------------------------------------------------------+ PDO ì˜ˆì œ 프로그램 ================= CUBRID PDO 드ë¼ì´ë²„ í™•ì¸ ------------------------ 사용 가능한 PDO 드ë¼ì´ë²„를 확ì¸í•˜ë ¤ë©´ 다ìŒê³¼ ê°™ì´ `PDO::getAvailableDrivers <http://docs.php.net/manual/en/pdo.getavailabledrivers.php>`_ () 함수를 사용한다. .. code-block:: php <?php echo'PDO Drivers available: '; foreach(PDO::getAvailableDrivers()as $driver) { if($driver =="cubrid"){ echo" - Driver: <b>".$driver.'</b> '; }else{ echo" - Driver: ".$driver.' '; } } ?> 위 스í¬ë¦½íŠ¸ëŠ” 다ìŒê³¼ ê°™ì´ ì„¤ì¹˜ëœ PDO 드ë¼ì´ë²„를 ì¶œë ¥í•œë‹¤. :: PDO Drivers available: - Driver: mysql - Driver: pgsql - Driver: sqlite - Driver: sqlite2 - Driver: cubrid CUBRID ì—°ê²° ----------- ë°ì´í„° ì›ë³¸ ì´ë¦„(DSN)ì„ ì‚¬ìš©í•˜ì—¬ ë°ì´í„°ë² ì´ìŠ¤ì— ì—°ê²°í•œë‹¤. ë°ì´í„° ì›ë³¸ ì´ë¦„ì— ëŒ€í•œ ìžì„¸í•œ ì„¤ëª…ì€ :ref:`pdo-dsn`\ ì„ ì°¸ê³ í•œë‹¤. 다ìŒì€ *demodb*\ ë¼ëŠ” CUBRID ë°ì´í„°ë² ì´ìŠ¤ì— PDO ì—°ê²°ì„ ìˆ˜í–‰í•˜ëŠ” 간단한 PHP 스í¬ë¦½íЏì´ë‹¤. PDOì—서는 try-catch로 오류를 처리하며, ì—°ê²°ì„ í•´ì œí• ë•Œì—는 ì—°ê²° ê°ì²´ì— **NULL**\ ì„ í• ë‹¹í•œë‹¤ëŠ” ê²ƒì„ ì•Œ 수 있다. .. code-block:: php <?php $database ="demodb"; $host ="localhost"; $port ="30000";//use default value $username ="dba"; $password =""; try{ //cubrid:host=localhost;port=33000;dbname=demodb $conn_str ="cubrid:dbname=".$database.";host=".$host.";port=".$port; echo"PDO connect string: ".$conn_str." "; $db =new PDO($conn_str, $username, $password ); echo"PDO connection created ok!"." "; $db = null;//disconnect }catch(PDOException $e){ echo"Error: ".$e->getMessage()." "; } ?> ì—°ê²°ì— ì„±ê³µí•˜ë©´ 다ìŒê³¼ ê°™ì€ ìŠ¤í¬ë¦½íŠ¸ê°€ ì¶œë ¥ëœë‹¤. :: PDO connect string: cubrid:dbname=demodb;host=localhost;port=30000 PDO connection created ok! SELECT 실행 ----------- PDOì—서 SQL 질ì˜ë¥¼ ìˆ˜í–‰í•˜ë ¤ë©´ 질ì˜ë‚˜ ì‘ìš© í”„ë¡œê·¸ëž¨ì˜ ì„±ê²©ì— ë”°ë¼ ë‹¤ìŒ ì¤‘ í•˜ë‚˜ì˜ ë°©ë²•ì„ ì‚¬ìš©í• ìˆ˜ 있다. * `query <http://docs.php.net/manual/en/pdo.exec.php>`_ () 함수 사용 * prepared statements( `prepare <http://docs.php.net/manual/en/pdo.prepare.php>`_ ()/ `execute <http://docs.php.net/manual/en/pdostatement.execute.php>`_ ()) 함수 사용 * `exec <http://docs.php.net/manual/en/pdo.exec.php>`_ () 함수 사용 ë‹¤ìŒ ì˜ˆì œì—서는 가장 간단한 `query <http://docs.php.net/manual/en/pdo.exec.php>`_ () 함수를 사용한다. 리턴 ê°’ì€ PDOStatement ê°ì²´ì¸ resultsetì—서 $rs["column_name"]와 ê°™ì´ ì¹¼ëŸ¼ ì´ë¦„ì„ ì´ìš©í•˜ì—¬ ì–»ì„ ìˆ˜ 있다. `query <http://docs.php.net/manual/en/pdo.exec.php>`_ () 함수를 ì‚¬ìš©í• ë•Œì—는 ì§ˆì˜ ì½”ë“œê°€ ì œëŒ€ë¡œ ì´ìŠ¤ì¼€ì´í”„ë˜ì—ˆëŠ”ì§€ 확ì¸í•´ì•¼ 한다. ì´ìŠ¤ì¼€ì´í”„ì— ëŒ€í•œ ë‚´ìš©ì€ `PDO::quote <https://www.php.net/manual/en/pdo.quote.php>`_ ()를 ì°¸ê³ í•œë‹¤. .. code-block:: php <?php include("_db_config.php"); include("_db_connect.php"); $sql ="SELECT * FROM code"; echo"Executing SQL: <b>".$sql.'</b> '; echo' '; try{ foreach($db->query($sql)as $row){ echo $row['s_name'].' - '. $row['f_name'].' '; } }catch(PDOException $e){ echo $e->getMessage(); } $db = null;//disconnect ?> 위 스í¬ë¦½íŠ¸ì˜ ê²°ê³¼ëŠ” 다ìŒê³¼ ê°™ì´ ì¶œë ¥ëœë‹¤. :: Executing SQL: SELECT * FROM code X - Mixed W - Woman M - Man B - Bronze S - Silver G - Gold UPDATE 실행 ----------- 다ìŒì€ prepared statement와 파ë¼ë¯¸í„°ë¥¼ 사용하여 UPDATE를 실행하는 ì˜ˆì œì´ë‹¤. prepared statement ëŒ€ì‹ `exec <http://docs.php.net/manual/en/pdo.exec.php>`_ () 함수를 ì‚¬ìš©í• ìˆ˜ë„ ìžˆë‹¤. .. code-block:: php <?php include("_db_config.php"); include("_db_connect.php"); $s_name ='X'; $f_name ='test'; $sql ="UPDATE code SET f_name=:f_name WHERE s_name=:s_name"; echo"Executing SQL: <b>".$sql.'</b> '; echo' '; echo":f_name: <b>".$f_name.'</b> '; echo' '; echo":s_name: <b>".$s_name.'</b> '; echo' '; $qe = $db->prepare($sql); $qe->execute(array(':s_name'=>$s_name,':f_name'=>$f_name)); $sql ="SELECT * FROM code"; echo"Executing SQL: <b>".$sql.'</b> '; echo' '; try{ foreach($db->query($sql)as $row){ echo $row['s_name'].' - '. $row['f_name'].' '; } }catch(PDOException $e){ echo $e->getMessage(); } $db = null;//disconnect ?> 위 스í¬ë¦½íŠ¸ì˜ ì‹¤í–‰ 결과는 다ìŒê³¼ ê°™ì´ ì¶œë ¥ëœë‹¤. :: Executing SQL: UPDATE code SET f_name=:f_name WHERE s_name=:s_name :f_name: test :s_name: X Executing SQL: SELECT * FROM code X - test W - Woman M - Man B - Bronze S - Silver G - Gold prepare와 bind -------------- prepared statement는 PDOê°€ ì œê³µí•˜ëŠ” ìœ ìš©í•œ 기능 중 하나로, 사용하면 다ìŒê³¼ ê°™ì€ ì´ì ì´ ìžˆë‹¤. * SQL prepared statement는 다양한 파ë¼ë¯¸í„°ì™€ 함께 여러 번 실행ë˜ì–´ë„ 한 번만 파싱하면 ëœë‹¤. ë”°ë¼ì„œ 여러 번 실행ë˜ëŠ” SQLë¬¸ì— prepared statement를 사용하면 CUBRID ì‘ìš© í”„ë¡œê·¸ëž¨ì˜ ì„±ëŠ¥ì„ ë†’ì¼ ìˆ˜ 있다. * 수ë™ìœ¼ë¡œ 파ë¼ë¯¸í„°ë¥¼ ì´ìŠ¤ì¼€ì´í”„í• í•„ìš”ê°€ 없으므로 SQL ì¸ì ì…˜ ê³µê²©ì„ ë°©ì§€í• ìˆ˜ 있다(그러나 SQL 질ì˜ì˜ 다른 ë¶€ë¶„ì´ ì´ìŠ¤ì¼€ì´í”„ë˜ì§€ ì•Šì€ ìž…ë ¥ìœ¼ë¡œ 구성ëœë‹¤ë©´ SQL ì¸ì ì…˜ì„ ì™„ì „ížˆ ë§‰ì„ ìˆ˜ëŠ” 없다). 다ìŒì€ prepared statement를 ì´ìš©í•˜ì—¬ ë°ì´í„°ë¥¼ 조회하는 예ì´ë‹¤. .. code-block:: php <?php include("_db_config.php"); include("_db_connect.php"); $sql ="SELECT * FROM code WHERE s_name NOT LIKE :s_name"; echo"Executing SQL: <b>".$sql.'</b> '; $s_name ='xyz'; echo":s_name: <b>".$s_name.'</b> '; echo' '; try{ $stmt = $db->prepare($sql); $stmt->bindParam(':s_name', $s_name, PDO::PARAM_STR); $stmt->execute(); $result = $stmt->fetchAll(); foreach($result as $row) { echo $row['s_name'].' - '. $row['f_name'].' '; } }catch(PDOException $e){ echo $e->getMessage(); } echo' '; $sql ="SELECT * FROM code WHERE s_name NOT LIKE :s_name"; echo"Executing SQL: <b>".$sql.'</b> '; $s_name ='X'; echo":s_name: <b>".$s_name.'</b> '; echo' '; try{ $stmt = $db->prepare($sql); $stmt->bindParam(':s_name', $s_name, PDO::PARAM_STR); $stmt->execute(); $result = $stmt->fetchAll(); foreach($result as $row) { echo $row['s_name'].' - '. $row['f_name'].' '; } $stmt->closeCursor(); }catch(PDOException $e){ echo $e->getMessage(); } echo' '; $db = null;//disconnect ?> 위 스í¬ë¦½íŠ¸ì˜ ê²°ê³¼ëŠ” 다ìŒê³¼ ê°™ì´ ì¶œë ¥ëœë‹¤. :: Executing SQL: SELECT * FROM code WHERE s_name NOT LIKE :s_name :s_name: xyz X - Mixed W - Woman M - Man B - Bronze S - Silver G - Gold Executing SQL: SELECT * FROM code WHERE s_name NOT LIKE :s_name :s_name: X W - Woman M - Man B - Bronze S - Silver G - Gold PDO::getAttribute() 사용 ------------------------ `PDO::getAttribute <http://docs.php.net/manual/en/pdo.getattribute.php>`_ () 함수는 다ìŒê³¼ ê°™ì€ ë°ì´í„°ë² ì´ìФ ì—°ê²° ì†ì„±ì„ ì¡°íšŒí• ë•Œ ìœ ìš©í•˜ë‹¤. * 드ë¼ì´ë²„ ì´ë¦„ * ë°ì´í„°ë² ì´ìФ ë²„ì „ * ìžë™ 커밋 모드 여부 * 오류 모드 ì†ì„±ì„ 쓸 수 있다면 `PDO::setAttribute <http://docs.php.net/manual/en/pdo.setattribute.php>`_ () 함수를 사용하여 ì†ì„±ì„ ì„¤ì •í• ìˆ˜ 있다. 다ìŒì€ `PDO::getAttribute <http://docs.php.net/manual/en/pdo.getattribute.php>`_ () 함수를 사용하여 í´ë¼ì´ì–¸íŠ¸ì™€ ì„œë²„ì˜ í˜„ìž¬ ë²„ì „ì„ ì¡°íšŒí•˜ëŠ” PHP PDO 스í¬ë¦½íЏì´ë‹¤. .. code-block:: php <?php include("_db_config.php"); include("_db_connect.php"); echo"Driver name: <b>".$db->getAttribute(PDO::ATTR_DRIVER_NAME)."</b>"; echo" "; echo"Client version: <b>".$db->getAttribute(PDO::ATTR_CLIENT_VERSION)."</b>"; echo" "; echo"Server version: <b>".$db->getAttribute(PDO::ATTR_SERVER_VERSION)."</b>"; echo" "; $db = null;//disconnect ?> 위 스í¬ë¦½íŠ¸ì˜ ê²°ê³¼ëŠ” 다ìŒê³¼ ê°™ì´ ì¶œë ¥ëœë‹¤. :: Driver name: cubrid Client version: 8.3.0 Server version: 8.3.0.0337 CUBRID PDO 확장 --------------- CUBRID PDO í™•ìž¥ì€ ë°ì´í„°ë² ì´ìФ 스키마와 메타ë°ì´í„° ì •ë³´ë¥¼ 조회하는 ë° ì‚¬ìš©í• ìˆ˜ 있는 PDO::cubrid_schema() 함수를 ì œê³µí•œë‹¤. 다ìŒì€ ì´ í•¨ìˆ˜ë¥¼ ì´ìš©í•˜ì—¬ *nation* í…Œì´ë¸”ì˜ ê¸°ë³¸í‚¤ë¥¼ 반환하는 스í¬ë¦½íЏì´ë‹¤. .. code-block:: php <?php include("_db_config.php"); include("_db_connect.php"); try{ echo"Get PRIMARY KEY for table: <b>nation</b>: "; $pk_list = $db->cubrid_schema(PDO::CUBRID_SCH_PRIMARY_KEY,"nation"); print_r($pk_list); }catch(PDOException $e){ echo $e->getMessage(); } $db = null;//disconnect ?> 위 스í¬ë¦½íŠ¸ì˜ ê²°ê³¼ëŠ” 다ìŒê³¼ ê°™ì´ ì¶œë ¥ëœë‹¤. :: Get PRIMARY KEY for table: nation: Array ( [0] => Array ( [CLASS_NAME] => nation [ATTR_NAME] => code [KEY_SEQ] => 1 [KEY_NAME] => pk_nation_code ) ) PDO API ======= PDO API와 ê´€ë ¨í•˜ì—¬ http://docs.php.net/manual/en/book.pdo.php\를 ì°¸ê³ í•œë‹¤. CUBRID PDO 드ë¼ì´ë²„ê°€ ì œê³µí•˜ëŠ” PDO API는 http://ftp.cubrid.org/CUBRID_Docs/Drivers/PDO/\를 ì°¸ê³ í•œë‹¤.