Á¦10Àå Zend_Db

¸ñÂ÷

10.1. Zend_Db_Adapter
10.1.1. ¾î´ðÅ͸¦ »ç¿ëÇÑ µ¥ÀÌŸº£À̽º Á¢¼Ó
10.1.2. »ùÇà µ¥ÀÌŸº£À̽º
10.1.3. Äõ¸® °á°úÀÇ Àбâ
10.1.4. µ¥ÀÌŸº£À̽º¿¡ÀÇ º¯°æÀÇ ¼­µÎ
10.1.5. °ªÀ̳ª ½Äº°ÀÚÀÇ ÄíÆ®
10.1.6. µ¥ÀÌŸº£À̽ºÀÇ Æ®·£Àè¼Ç(transaction)ÀÇ Á¦¾î
10.1.7. Å×À̺íÀÇ Á¤º¸ÀÇ Ãëµæ
10.1.8. Á¢¼ÓÀÇ Á¾·á
10.1.9. ±× ¿ÜÀÇ ½ºÅ×ÀÌÆ®¸ÕÆ®ÀÇ ½ÇÇà
10.1.10. °¢ ¾î´ðÅÍ °íÀ¯ÀÇ ÁÖÀÇÁ¡
10.2. Zend_Db_Statement
10.2.1. ½ºÅ×ÀÌÆ®¸ÕÆ®ÀÇ ÀÛ¼º
10.2.2. ½ºÅ×ÀÌÆ®¸ÕÆ®ÀÇ ½ÇÇà
10.2.3. SELECT ¹®ÀåÀ¸·ÎºÎÅÍÀÇ °á°úÀÇ Ãëµæ
10.3. Zend_Db_Profiler
10.3.1. µµÀÔ
10.3.2. ÇÁ·Î filerÀÇ »ç¿ë
10.3.3. ÇÁ·Î filerÀÇ °íµµÀÇ »ç¿ë¹ý
10.4. Zend_Db_Select
10.4.1. Select ¿ÀºêÁ§Æ®ÀÇ °³¿ä
10.4.2. Select ¿ÀºêÁ§Æ®ÀÇ ÀÛ¼º
10.4.3. Select Äõ¸®ÀÇ ÀÛ¼º
10.4.4. Select Äõ¸®ÀÇ ½ÇÇà
10.4.5. ±× ¿ÜÀÇ ¸Þ¼Òµå
10.5. Zend_Db_Table
10.5.1. Å×À̺í Ŭ·¡½º¿¡ µµÂøÇØ
10.5.2. Å×À̺í Ŭ·¡½ºÀÇ Á¤ÀÇ
10.5.3. Å×À̺íÀÇ ÀνºÅϽºÀÇ ÀÛ¼º
10.5.4. Å×ÀÌºí¿¡ÀÇ ÇàÀÇ »ðÀÔ
10.5.5. Å×À̺íÀÇ ÇàÀÇ °»½Å
10.5.6. Å×ÀÌºí¿¡¼­ÀÇ ÇàÀÇ »èÁ¦
10.5.7. ÁÖŰ¿¡ ÀÇÇÑ ÇàÀÇ °Ë»ö
10.5.8. Çà ¼¼Æ®ÀÇ ¹®ÀÇ
10.5.9. ´ÜÀÏÀÇ ÇàÀÇ ¹®ÀÇ
10.5.10. Å×À̺íÀÇ ¸ÞŸµ¥ÀÌŸ Á¤º¸ÀÇ Ãëµæ
10.5.11. Å×À̺íÀÇ ¸ÞŸµ¥ÀÌŸÀÇ Ä³½¬
10.5.12. Å×À̺í Ŭ·¡½ºÀÇ Ä¿½ºÅ͸¶ÀÌÁî ¹× È®Àå
10.6. Zend_Db_Table_Row
10.6.1. µµÀÔ
10.6.2. ÇàÀÇ Ãëµæ
10.6.3. µ¥ÀÌŸº£À̽º¿¡ÀÇ ÇàÀÇ ±âÀÔ
10.6.4. ÇàÀÇ ½Ã¸®¾Æ¶óÀÌÁî¿Í º¹¿ø
10.6.5. Çà Ŭ·¡½ºÀÇ È®Àå
10.7. Zend_Db_Table_Rowset
10.7.1. µµÀÔ
10.7.2. Çà ¼¼Æ®ÀÇ Ãëµæ
10.7.3. Çà ¼¼Æ®·ÎºÎÅÍÀÇ ÇàÀÇ Ãëµæ
10.7.4. Çà ¼¼Æ®ÀÇ ¹è¿­·Î¼­ÀÇ Ãëµæ
10.7.5. Çà ¼¼Æ®ÀÇ ½Ã¸®¾Æ¶óÀÌÁî¿Í º¹¿ø
10.7.6. Çà ¼¼Æ® Ŭ·¡½ºÀÇ È®Àå
10.8. Zend_Db_Table Relationships
10.8.1. µµÀÔ
10.8.2. ¸±·¹À̼ÇÀÇ Á¤ÀÇ
10.8.3. Á¾¼ÓÇà ¼¼Æ®ÀÇ Ãëµæ
10.8.4. ºÎ¸ðÀÇ ÇàÀÇ Ãëµæ
10.8.5. ´Ù´ë ´ÙÀÇ ¸±·¹À̼ÇÀ» »ç¿ëÇÑ Çà ¼¼Æ®ÀÇ Ãëµæ
10.8.6. ±âÀÔ Á¶ÀÛÀÇ ¿¬¼â

10.1. Zend_Db_Adapter

Zend_Db (¿Í)°ú ±× °ü·Ã Ŭ·¡½º±ºÀº,Zend Framework ¿¡ µÎ¾î SQL µ¥ÀÌŸº£À̽º¿ÍÀÇ ÀÎÅÍÆäÀ̽º¸¦ ´ã´çÇÕ´Ï´Ù. Zend_Db_Adapter (Àº)´Â,PHP ¾îÇø®ÄÉÀ̼ÇÀ¸·ÎºÎÅÍ RDBMS ¿¡ Á¢¼ÓÇÒ ¶§¿¡ »ç¿ëÇÏ´Â ±âº» Ŭ·¡½ºÀÔ´Ï´Ù. RDBMS ÀÇ Á¾·ù¿¡ µû¸£°í, °¢°¢ °³º°ÀÇ ¾î´ðÅÍ Å¬·¡½º°¡ ÀÖ½À´Ï´Ù.

Zend_Db ÀÇ ¾î´ðÅÍ´Â, º¥´õ °íÀ¯ÀÇ PHP È®Àå ¸ðµâÀ» °øÅë ÀÎÅÍÆäÀ̽º¿¡ ÀÖ¾î Á¤¸®ÇÏ´Â ¿ªÇÒÀ» ¿Ï¼öÇÕ´Ï´Ù. À̰Ϳ¡ ÀÇÇØ, ÇÑ ¹ø ½è´Ù PHP ¾îÇø®ÄÉÀ̼ÇÀÌ ¾ÆÁÖ Á¶±ÝÀÇ ¼ö°í·Î º¹¼ö RDBMS ¿¡ ´ëÀÀÇÏ°Ô µË´Ï´Ù.

¾î´ðÅÍ Å¬·¡½ºÀÇ ÀÎÅÍÆäÀ̽º´Â, PHP Data Objects È®Àå ¸ðµâÀÇ ÀÎÅÍÆäÀ̽º¿Í ´à¾Æ ÀÖ½À´Ï´Ù. Zend_Db ±×·³, ´ÙÀ½ÀÇ RDBMS ¿ë¹«ÀÇ PDO µå¶óÀ̹ö¿¡ ´ëÇÑ ¾î´ðÅÍ Å¬·¡½º¸¦ ÁغñÇϰí ÀÖ½À´Ï´Ù.

  • IBM DB2 ¹× Informix Dynamic Server (IDS) (pdo_ibm PHP È®Àå ¸ðµâÀ» »ç¿ë)

  • MySQL (pdo_mysql PHP È®Àå ¸ðµâÀ» »ç¿ë)

  • Microsoft SQL Server (pdo_mssql PHP È®Àå ¸ðµâÀ» »ç¿ë)

  • Oracle (pdo_oci PHP È®Àå ¸ðµâÀ» »ç¿ë)

  • PostgreSQL (pdo_pgsql PHP È®Àå ¸ðµâÀ» »ç¿ë)

  • SQLite (pdo_sqlite PHP È®Àå ¸ðµâÀ» »ç¿ë)

°Ô´Ù°¡Zend_Db ±×·³, ÀÌÇÏÀÇ RDBMS ¿ë¹«ÀÇ È®Àå ¸ðµâÀ» »ç¿ëÇÏ´Â ¾î´ðÅÍ Å¬·¡½ºµµ ÁغñÇØ ÀÖ½À´Ï´Ù.

  • MySQL (mysqli (À»)¸¦ »ç¿ëÇÕ´Ï´Ù)

  • Oracle (oci8 (À»)¸¦ »ç¿ëÇÕ´Ï´Ù)

  • IBM DB2 (ibm_db2 (À»)¸¦ »ç¿ëÇÕ´Ï´Ù)

  • Firebird/Interbase (php_interbase (À»)¸¦ »ç¿ëÇÕ´Ï´Ù)

[ÁÖÀÇ] ÁÖÀÇ

Zend_Db ÀÇ ¾î´ðÅÍ´Â, ¸ðµÎ PHP ÀÇ È®Àå ¸ðµâÀ» »ç¿ëÇϰí ÀÖ½À´Ï´Ù. Zend_Db ÀÇ ¾î´ðÅ͸¦ »ç¿ëÇÏ·Á¸é , ´ëÀÀÇÑ´Ù PHP È®Àå ¸ðµâÀ» »ç¿ëÇÒ ¼ö Àִ ȯ°æÀÌ ¾Æ´Ï¸é ¾ÈµË´Ï´Ù. ¿¹¸¦ µé¾î,PDO °èÀÇ Zend_Db ¾î´ðÅ͸¦ »ç¿ëÇÑ´Ù¸é, PDO È®Àå ¸ðµâÀÌ ÇÊ¿äÇϰí, ¶Ç »ç¿ëÇÑ´Ù RDBMS ¿ë¹«ÀÇ PDO µå¶óÀ̹öµµ ÇÊ¿äÇÕ´Ï´Ù.

10.1.1. ¾î´ðÅ͸¦ »ç¿ëÇÑ µ¥ÀÌŸº£À̽º Á¢¼Ó

¿©±â¿¡¼­´Â, µ¥ÀÌŸº£À̽º ¾î´ðÅÍÀÇ ÀνºÅϽº¸¦ ÀÛ¼ºÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÕ´Ï´Ù. À̰ÍÀº,PHP ¾îÇø®ÄÉÀ̼ÇÀ¸·ÎºÎÅÍ RDBMS ¼­¹ö¿¡ÀÇ Á¢¼ÓÀ» È®¸³ÇÏ´Â °Í¿¡ ´ëÀÀÇÕ´Ï´Ù.

10.1.1.1. Zend_Db ¾î´ðÅÍÀÇ constructor¡¡ ¡¡ ÀÇ »ç¿ë

constructor¡¡ ¡¡ À» »ç¿ëÇϰí, ¾î´ðÅÍÀÇ ÀνºÅϽº¸¦ ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. ¾î´ðÅÍÀÇ constructor¡¡ ¡¡ ÀÌ ¹Þ´Â Àμö´Â Çϳª·Î, Á¢¼ÓÀ» È®¸³Çϱâ À§Çؼ­ ÇÊ¿äÇÑ ÆÄ¶ó¹ÌÅ͸¦ ¹è¿­·Î °Ç³×ÁÝ´Ï´Ù.

·Ê 10.1. ¾î´ðÅÍÀÇ constructor¡¡ ¡¡ ÀÇ »ç¿ë


<?php
require_once 'Zend/Db/Adapter/Pdo/Mysql.php';

$db = new Zend_Db_Adapter_Pdo_Mysql(array(
    
'host'     => '127.0.0.1',
    
'username' => 'webuser',
    
'password' => 'xxxxxxxx',
    
'dbname'   => 'test'
));

10.1.1.2. Zend_Db ÀÇ ÆÑÅ丮ÀÇ »ç¿ë

constructor¡¡ ¡¡ À» Á÷Á¢ »ç¿ëÇÏ´Â ÀÌ¿Ü ¹æ¹ýÀ¸·Î¼­ Á¤Àû ¸Þ¼Òµå Zend_Db::factory() (À»)¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ ¸Þ¼Òµå´Â, Çʿ信 µû¶ó¼­ Zend_Loader::loadClass() (À»)¸¦ »ç¿ëÇØ µ¿ÀûÀ¸·Î ¾î´ðÅÍ Å¬·¡½º¸¦ ÀоîµéÀÔ´Ï´Ù.

ÃÖÃÊÀÇ Àμö¿¡´Â, ¾î´ðÅÍ Å¬·¡½ºÀÇ º£À̽º¸íÀ» ¹®ÀÚ¿­·Î ÁöÁ¤ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, ¹®ÀÚ¿­ 'Pdo_Mysql' ÇÏ Zend_Db_Adapter_Pdo_Mysql Ŭ·¡½º¿¡ ´ëÀÀÇÕ´Ï´Ù.±× ´ÙÀ½ÀÇ Àμö´Â, ¾î´ðÅÍÀÇ constructor¡¡ ¡¡ À¸·Î ÁöÁ¤ÇÏ´Â °Í°ú °°Àº Çü½ÄÀÇ ¹è¿­ÀÌ µË´Ï´Ù.

·Ê 10.2. ÆÑÅ丮 ¸Þ¼ÒµåÀÇ »ç¿ë


<?php
require_once 'Zend/Db.php';

// ÀÚµ¿ÀûÀ¸·Î Zend_Db_Adapter_Pdo_Mysql Å¬·¡½º¸¦ Àоîµé¿©, ±× ÀνºÅϽº¸¦ ÀÛ¼ºÇÕ´Ï´Ù
$db Zend_Db::factory('Pdo_Mysql', array(
    
'host'     => '127.0.0.1',
    
'username' => 'webuser',
    
'password' => 'xxxxxxxx',
    
'dbname'   => 'test'
));

µ¶ÀÚÀûÀ¸·Î Zend_Db_Adapter_Abstract ÀÇ »ó¼Ó Ŭ·¡½º¸¦ ÀÛ¼ºÇØ, ±× Ŭ·¡½º¸íÀÇ ÇÁ·¹ÇȽº°¡ "Zend_Db_Adapter" (ÀÌ)°¡ ¾Æ´Ñ °æ¿ì¿¡ factory() ±×¸®°í ±× ¾î´ðÅ͸¦ ÀоîµéÀÌ·Á¸é , ÀÛ¼ºÇÑ Å¬·¡½º¸íÀÇ ¼±µÎÀÇ ºÎºÐÀ» ÆÄ¶ó¹ÌÅÍ ¹è¿­ÀÇ Å° 'adapterNamespace' ±×¸®°í ÁöÁ¤ÇÕ´Ï´Ù.

·Ê 10.3. ÀÚÀÛÀÇ ¾î´ðÅÍ Å¬·¡½º¸¦ ¾î´ðÅÍÀÇ ÆÑÅ丮 ¸Þ¼Òµå·Î »ç¿ëÇÏ´Â ¹æ¹ý


<?php
require_once 'Zend/Db.php';

// ÀÚµ¿ÀûÀ¸·Î MyProject_Db_Adapter_Pdo_Mysql Å¬·¡½º¸¦ Àоîµé¿©, ÀνºÅϽº¸¦ ÀÛ¼ºÇÕ´Ï´Ù
$db Zend_Db::factory('Pdo_Mysql', array(
    
'host'             => '127.0.0.1',
    
'username'         => 'webuser',
    
'password'         => 'xxxxxxxx',
    
'dbname'           => 'test',
    
'adapterNamespace' => 'MyProject_Db_Adapter'
));

10.1.1.3. Zend_Db ÆÑÅ丮·ÎÀÇ Zend_Config ÀÇ »ç¿ë

factory() ¸Þ¼ÒµåÀÇ Àμö·Î¼­ Zend_Config ÀÇ ¿ÀºêÁ§Æ®¸¦ °Ç³×ÁÙ ¼öµµ ÀÖ½À´Ï´Ù.

ÃÖÃÊÀÇ Àμö¿¡ config ¿ÀºêÁ§Æ®¸¦ °Ç³×ÁÖ´Â °æ¿ì´Â, ±× ÇÁ·ÓÆÛƼ¿¡ adapter ÇÏÁö¸¸ Æ÷ÇԵǾî ÀÖ´Â °ÍÀ¸·Î ÇÕ´Ï´Ù. °Å±â¿¡, ¾î´ðÅÍ Å¬·¡½º¸íÀ» ³ªÅ¸³»´Â ¹®ÀÚ¿­À» ÁöÁ¤ÇÕ´Ï´Ù. ¶Ç, ¿É¼ÇÀ¸·Î params ±×·¸´Ù°í ÇÏ´Â ÇÁ·ÓÆÛƼµµ ÁöÁ¤ÇÒ ¼ö ÀÖ¾î ±× ºÎÇÏÀÇ ¼­ºê ÇÁ·ÓÆÛƼ·Î¼­ ¾î´ðÅÍÀÇ ÆÄ¶ó¹ÌÅ͸íÀ» ÁöÁ¤ÇÕ´Ï´Ù. À̰ÍÀº,factory() ¸Þ¼ÒµåÀÇ 2 ¹øÂ°ÀÇ ÆÄ¶ó¹ÌÅ͸¦ »ý·« ÇßÀ» °æ¿ì¿¡°Ô¸¸ ÀÐÈü´Ï´Ù.

·Ê 10.4. ¾î´ðÅÍÀÇ ÆÑÅ丮 ¸Þ¼Òµå·ÎÀÇ Zend_Config ¿ÀºêÁ§Æ®ÀÇ »ç¿ë

´ÙÀ½ÀÇ ¿¹¿¡¼­´Â, ¹è¿­·ÎºÎÅÍ Zend_Config ¿ÀºêÁ§Æ®¸¦ ÀÛ¼ºÇÕ´Ï´Ù. ±× À̿ܿ¡µµ, Zend_Config_Ini (ÀÌ)³ª Zend_Config_Xml µîÀ» ÀÌ¿ëÇØ ¿ÜºÎ ÆÄÀϷκÎÅÍ µ¥ÀÌÅ͸¦ ÀоîµéÀÏ ¼öµµ ÀÖ½À´Ï´Ù.


<?php
require_once 'Zend/Config.php';
require_once 
'Zend/Db.php';

$config = new Zend_Config(
    array(
        
'database' => array(
            
'adapter' => 'Mysqli',
            
'params' => array(
                
'dbname' => 'test',
                
'username' => 'webuser',
                
'password' => 'secret',
            )
        )
    )
);

$db Zend_Db::factory($config->database);
));

factory() ¸Þ¼ÒµåÀÇ 2 ¹øÂ°ÀÇ Àμö¿¡´Â, ¾î´ðÅÍÀÇ ÆÄ¶ó¹ÌÅÍ¿¡ ´ëÀÀÇÏ´Â ¿£Æ®¸®¸¦ °¡Áö´Â ¿¬»ó ¹è¿­ÀÌ µË´Ï´Ù. ÀÌ Àμö´Â ¿É¼ÇÀÔ´Ï´Ù.ÃÖÃÊÀÇ Àμö°¡ Zend_Config ÀÎ °æ¿ì´Â, °Å±â¿¡ ¸ðµç ÆÄ¶ó¹ÌÅͰ¡ Æ÷ÇԵǾî ÀÖ´Â °ÍÀ¸·Î °£ÁÖÇØ, 2 ¹øÂ°ÀÇ Àμö´Â ¹«½ÃµË´Ï´Ù.

10.1.1.4. ¾î´ðÅÍÀÇ ÆÄ¶ó¹ÌÅÍ

Zend_Db ÀÇ ¾î´ðÅÍ Å¬·¡½º¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Â ÆÄ¶ó¹ÌÅ͸¦ ÀÌÇÏ¿¡ Á¤¸®ÇÕ´Ï´Ù.

  • host: µ¥ÀÌÅÍ º£À̽º ¼­¹öÀÇ È£½ºÆ®¸í ȤÀº IP ÁÖ¼Ò. µ¥ÀÌŸº£À̽º°¡ PHP ¾îÇø®ÄÉÀ̼ǰú °°Àº È£½ºÆ®»ó¿¡¼­ ¿òÁ÷À̰í ÀÖ´Â °æ¿ì´Â, 'localhost' ȤÀº '127.0.0.1' (À»)¸¦ ÁöÁ¤ÇÕ´Ï´Ù.

  • username: RDBMS ¼­¹ö¿¡ÀÇ Á¢¼Ó½Ã¿¡ »ç¿ëÇÏ´Â ÀÎÁõ¿ë ¾îÄ«¿îÆ®ÀÇ ID.

  • password: RDBMS ¼­¹ö¿¡ÀÇ Á¢¼Ó½Ã¿¡ »ç¿ëÇÏ´Â ÀÎÁõ¿ë ÆÐ½º¿öµå.

  • dbname: RDBMS ¼­¹ö»óÀÇ µ¥ÀÌŸº£À̽º ÀνºÅϽº¸í.

  • port: RDBMS ¼­¹ö¿¡ µû¶ó¼­´Â, °ü¸®ÀÚ°¡ ÁöÁ¤Çß´Ù Æ÷Åä ¹øÈ£¿¡ ÀÇÇÑ ³×Æ®¿öÅ© Á¢¼ÓÀ» Çã°¡Çϰí ÀÖ´Â °Íµµ ÀÖ½À´Ï´Ù. ÀÌ ÆÄ¶ó¹ÌÅ͸¦ »ç¿ëÇϸé,PHP ¾îÇø®ÄÉÀ̼ÇÀÌ Á¢¼Ó½Ã¿¡ »ç¿ëÇÏ´Â Æ÷Åä ¹øÈ£¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. À̰ÍÀº RDBMS ¼­¹öÀÇ ¼³Á¤¿¡ ¸ÂÃßÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù.

  • options: ÀÌ ÆÄ¶ó¹ÌÅÍ´Â, ¸ðµç Zend_Db_Adapter Ŭ·¡½º¿¡¼­ °øÅëÀÇ ¿É¼ÇÀ» ¿¬»ó ¹è¿­·Î ÁöÁ¤ÇÕ´Ï´Ù.

  • driver_options: ÀÌ ÆÄ¶ó¹ÌÅÍ´Â, °¢ µ¥ÀÌŸº£À̽º È®Àå ¸ðµâ¿¡ °íÀ¯ÀÇ Ãß°¡ ¿É¼ÇÀ» ¿¬»ó ¹è¿­·Î ÁöÁ¤ÇÕ´Ï´Ù. ÀüÇüÀûÀÎ »ç¿ë¿¹·Î¼­´Â,PDO µå¶óÀ̹öÀÇ ¼Ó¼ºµîÀÌ ÀÖ½À´Ï´Ù.

  • adapterNamespace: ¾î´ðÅÍ Å¬·¡½ºÀÇ À̸§ÀÇ ¼±µÎ°¡ 'Zend_Db_Adapter' ÀÌ¿ÜÀÎ °æ¿ì¿¡, ±×°ÍÀ» ÁöÁ¤ÇÕ´Ï´Ù.À̰ÍÀº, Zend À̿ܰ¡ ÀÛ¼ºÇÑ ¾î´ðÅÍ Å¬·¡½º¸¦ factory() ¸Þ¼Òµå·Î »ç¿ëÇÏ°í ½ÍÀº °æ¿ì·Î ÁöÁ¤ÇÕ´Ï´Ù.

·Ê 10.5. ÆÑÅ丮·ÎÀÇ ´ë¹®ÀÚ ¼Ò¹®ÀÚ º¯È¯ ¿É¼ÇÀÇ ÁöÁ¤

ÀÌ ¿É¼ÇÀº, Á¤¼ö Zend_Db::CASE_FOLDING ±×¸®°í ÁöÁ¤ÇÕ´Ï´Ù. À̰ÍÀº,PDO (ÀÌ)³ª IBM DB2 µ¥ÀÌŸº£À̽º µå¶óÀ̹ö¿¡ À־ÀÇ ATTR_CASE ¼Ó¼º¿¡ ´ëÀÀÇÏ´Â °ÍÀ¸·Î, °á°ú ¼¼Æ®ÀÇ ¹®ÀÚ¿­ ŰÀÇ ´ë¹®ÀÚ ¼Ò¹®ÀÚ º¯È¯À» ÁöÁ¤ÇÕ´Ï´Ù. ¼³Á¤ÇÒ ¼ö ÀÖ´Â °ªÀº Zend_Db::CASE_NATURAL (µðÆúÆ®), Zend_Db::CASE_UPPER ¹× Zend_Db::CASE_LOWER ÀÇ ¸ÓÁö¾Ê¾ÆÀΰ¡ÀÔ´Ï´Ù.


<?php
$options 
= array(
    
Zend_Db::CASE_FOLDING => Zend_Db::CASE_UPPER
);

$params = array(
    
'host'           => '127.0.0.1',
    
'username'       => 'webuser',
    
'password'       => 'xxxxxxxx',
    
'dbname'         => 'test',
    
'options'        => $options
);

$db Zend_Db::factory('Db2'$params);

·Ê 10.6. ÆÑÅ丮·ÎÀÇ ÀÚµ¿ ÄíÆ®¿ÀÇÁ¼ÇÀÇ ÁöÁ¤

ÀÌ ¿É¼ÇÀº, Á¤¼ö Zend_Db::AUTO_QUOTE_IDENTIFIERS ±×¸®°í ÁöÁ¤ÇÕ´Ï´Ù. ÀÌ °ªÀÌ true (µðÆúÆ®) ÀÇ °æ¿ì´Â, ¾î´ðÅͰ¡ »ý¼ºÇÑ´Ù SQL ¹®ÁßÀÇ Å×À̺í¸íÀ̳ª Ä÷³¸í, ¾Ù¸®¾î½º(alias)¶ó°í ÇÏ´Â ½Äº°ÀÚ¸¦ ¸ðµÎ ÄíÆ® ÇÕ´Ï´Ù.À̰Ϳ¡ ÀÇÇØ, SQL ÀÇ Å°¿öµå³ª Ư¼ö ¹®ÀÚ¸¦ Æ÷ÇÔÇÑ ½Äº°ÀÚ¸¦ »ç¿ëÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù. ÀÌ °ªÀÌ false ÀÇ °æ¿ì´Â, ½Äº°ÀÚÀÇ ÀÚµ¿ ÄíÆ®´Â ½Ç½ÃÇÏÁö ¾Ê½À´Ï´Ù. ÄíÆ® ÇØ¾ß ÇÒ ¹®ÀÚ¸¦ »ç¿ëÇϰí ÀÖ´Â °æ¿ì´Â, ½º½º·Î quoteIdentifier() ¸Þ¼Òµå¸¦ ÄÝ ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.


<?php
$options 
= array(
    
Zend_Db::AUTO_QUOTE_IDENTIFIERS => false
);

$params = array(
    
'host'           => '127.0.0.1',
    
'username'       => 'webuser',
    
'password'       => 'xxxxxxxx',
    
'dbname'         => 'test',
    
'options'        => $options
);

$db Zend_Db::factory('Pdo_Mysql'$params);

·Ê 10.7. ÆÑÅ丮·ÎÀÇ PDO µå¶óÀ̹öÀÇ ¿É¼ÇÀÇ ÁöÁ¤


<?php
$pdoParams 
= array(
    
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true
);

$params = array(
    
'host'           => '127.0.0.1',
    
'username'       => 'webuser',
    
'password'       => 'xxxxxxxx',
    
'dbname'         => 'test',
    
'driver_options' => $pdoParams
);

$db Zend_Db::factory('Pdo_Mysql'$params);

echo 
$db->getConnection()->getAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY);

10.1.1.5. Áö¿¬ Á¢¼ÓÀÇ °ü¸®

¾î´ðÅÍ Å¬·¡½ºÀÇ ÀνºÅϽº¸¦ ÀÛ¼ºÇÑ ½ÃÁ¡¿¡¼­´Â, ¾ÆÁ÷ RDBMS ¼­¹ö¿¡ÀÇ Á¢¼ÓÀº ÇàÇØÁöÁö ¾Ê½À´Ï´Ù. Á¢¼Ó¿ëÀÇ ÆÄ¶ó¹ÌÅ͸¦ ³»ºÎ¿¡¼­ º¸°ü À¯ÁöÇØ µÎ¾î, ½ÇÁ¦·Î Äõ¸®¸¦ ½ÇÇàÇÏ°Ô µÈ ½ÃÁ¡¿¡¼­ óÀ½À¸·Î Á¢¼ÓÀ» È®¸³ÇÕ´Ï´Ù. À̰Ϳ¡ ÀÇÇØ, ¾î´ðÅÍ ¿ÀºêÁ§Æ®¸¦ Àçºü¸£°Ô ÀÛ¼ºÇÒ ¼ö ÀÖ°Ô µÇ¾î ÀÖ½À´Ï´Ù. Áï, ±× ¸®Äù½ºÆ® Áß(¾È)¿¡¼­ ½ÇÁ¦·Î µ¥ÀÌŸº£À̽º Äõ¸®¸¦ ¹ßÇàÇÒÁö°¡ È®Á¤Çϰí ÀÖÁö ¾Ê¾Æµµ, ¿ì¼± ¾î´ðÅÍÀÇ ÀνºÅϽº¸¦ ÀÛ¼ºÇØ µÎ´Â °Íµµ ÇÒ ¼ö ÀÖ½À´Ï´Ù.

°­Á¦ÀûÀ¸·Î RDBMS (¿Í)°úÀÇ Á¢¼ÓÀ» È®¸³ÇÒ Çʿ䰡 ÀÖ´Â °æ¿ì´Â, getConnection() ¸Þ¼Òµå¸¦ »ç¿ëÇÕ´Ï´Ù. ÀÌ ¸Þ¼Òµå´Â, ´ëÀÀÇÑ´Ù PHP È®Àå ¸ðµâ¿ëÀÇ Á¢¼Ó ¿ÀºêÁ§Æ®¸¦ µ¹·ÁÁÝ´Ï´Ù. ¿¹¸¦ µé¾î,PDO µå¶óÀ̹ö°èÀÇ ¾î´ðÅÍ Å¬·¡½º¸¦ »ç¿ëÇßÀ» °æ¿ì´Â, getConnection() ÇÏ µ¥ÀÌŸº£À̽º¿ÍÀÇ Á¢¼ÓÀ» È®¸³ÇÏ°í ³ª¼­ PDO ¿ÀºêÁ§Æ®¸¦ µ¹·ÁÁÝ´Ï´Ù.

µ¥ÀÌŸº£À̽º¿¡ÀÇ Á¢¼Ó½Ã¿¡ ¹ß»ýÇÏ´Â ¿¹¿Ü, Áï ID (ÀÌ)³ª ÆÐ½º¿öµåÀÇ ½Ç¼öµîÀ» Æ÷ÂøÇÏ°í ½ÍÀº °æ¿ì¿¡, À̰ÍÀº µµ¿òÀÌ µÇ°ÚÁö¿ä. ½ÇÁ¦·Î Á¢¼ÓÀ» ½Ç½ÃÇÒ ¶§±îÁö ¿¹¿Ü´Â ½½·Î¿ì µÇÁö ¾Ê±â ¶§¹®¿¡, ¾îµò°¡ 1À̳ª °÷¿¡ ¿¹¿Ü 󸮸¦ ¸ð¾Æ µÎ´Â ÆíÀÌ ¾îÇø®ÄÉÀ̼ÇÀÌ ½ÉÇÃÇÏ°Ô µÇ¾î Æí¸®ÇϰÚÁö¿ä.

·Ê 10.8. Á¢¼Ó½ÃÀÇ ¿¹¿Ü ó¸®


<?php
try {
    
$db Zend_Db::factory('Pdo_Mysql'$parameters);
    
$db->getConnection();
} catch (
Zend_Db_Adapter_Exception $e) {
    
// ID Àΰ¡ ÆÐ½º¿öµå°¡ À߸øµÇ¾î ÀÖ´Ù, ȤÀº RDBMS ÇÏÁö¸¸ ±âµ¿Çϰí ÀÖÁö ¾Ê´Â µî¡¦¡¦
} catch (Zend_Exception $e) {
    
// factory() ÇÏÁö¸¸ ÁöÁ¤ÇÑ ¾î´ðÅÍ Å¬·¡½º¸¦ ÀоîµéÀÏ ¼ö ÀÖ´Â (¾È)Áߵ¡¦
}

10.1.2. »ùÇà µ¥ÀÌŸº£À̽º

Zend_Db Ŭ·¡½ºÀÇ ¹®¼­¿¡¼­´Â, Ŭ·¡½º³ª ¸Þ¼ÒµåÀÇ »ç¿ë¹ýÀ» ¼³¸íÇϱâ À§Çؼ­ ´Ü¼øÇÑ µ¥ÀÌŸº£À̽º¸¦ »ç¿ëÇÕ´Ï´Ù. À̰ÍÀº, ¾î¶² ¼ÒÇÁÆ®¿þ¾î °³¹ß ÇÁ·ÎÁ§Æ®¿¡ À־ÀÇ ¹ö±× °ü¸®¸¦ »óÁ¤ÇÑ °ÍÀÔ´Ï´Ù. ´ÙÀ½ÀÇ 4 °³ÀÇ Å×À̺í·Î ±¸¼ºµÇ¾î ÀÖ½À´Ï´Ù.

  • accounts Å×ÀÌºí¿¡´Â, ¹ö±× °ü¸® µ¥ÀÌŸº£À̽º¸¦ »ç¿ëÇÏ´Â À¯Àú¿¡ ´ëÇÑ Á¤º¸¸¦ °Ý³³ÇÕ´Ï´Ù.

  • products Å×ÀÌºí¿¡´Â, ¹ö±×¸¦ ±â·ÏÇÏ´Â ´ë»óÀÌ µÇ´Â Á¦Ç°¿¡ ´ëÇÑ Á¤º¸¸¦ °Ý³³ÇÕ´Ï´Ù.

  • bugs Å×ÀÌºí¿¡´Â, ¹ö±×¿¡ ´ëÇÑ Á¤º¸¸¦ °Ý³³ÇÕ´Ï´Ù. ¹ö±× »óųª º¸°íÀÚ, ¼öÁ¤ ´ã´çÀÚ, °ËÁõ ´ã´çÀÚµîÀÇ Á¤º¸°¡ Æ÷ÇԵ˴ϴÙ.

  • bugs_products Å×ÀÌºí¿¡´Â, ¹ö±×¿Í Á¦Ç°ÀÌ °ü·ÃÁö¾î Á¤º¸¸¦ °Ý³³ÇÕ´Ï´Ù. À̰ÍÀº, À̸¥¹Ù ´Ù´ë ´ÙÀÇ ¸±·¹ÀÌ¼Ç ½±À» ½ÇÀåÇÏ´Â °ÍÀÔ´Ï´Ù. ÇϳªÀÇ ¹ö±×°¡ º¹¼öÀÇ Á¦Ç°¿¡ °ü·ÃÇÏ´Â °ÍÀ̱⵵ Çϸé, ´ç¿¬È÷ ÇϳªÀÇ Á¦Ç°¿¡´Â º¹¼öÀÇ ¹ö±×°¡ Á¸ÀçÇϱ⠶§¹®ÀÔ´Ï´Ù.

ÀÌ »ùÇà µ¥ÀÌŸº£À̽º¸¦ ÀÛ¼ºÇϱâ À§ÇÑ SQL ÀÇ ÀÇ»ç ÄÚµå´Â, ´ÙÀ½°ú °°ÀÌ µË´Ï´Ù. ÀÌ·¯ÇÑ Å×À̺íÀº,Zend_Db ÀÚüÀÇ À¯´Ö Å×½ºÆ®¿¡¼­µµ »ç¿ëÇÕ´Ï´Ù.


CREATE TABLE accounts (
  account_name      VARCHAR(100) NOT NULL PRIMARY KEY
);

CREATE TABLE products (
  product_id        INTEGER NOT NULL PRIMARY KEY,
  product_name      VARCHAR(100)
);

CREATE TABLE bugs (
  bug_id            INTEGER NOT NULL PRIMARY KEY,
  bug_description   VARCHAR(100),
  bug_status        VARCHAR(20),
  reported_by       VARCHAR(100) REFERENCES accounts(account_name),
  assigned_to       VARCHAR(100) REFERENCES accounts(account_name),
  verified_by       VARCHAR(100) REFERENCES accounts(account_name)
);

CREATE TABLE bugs_products (
  bug_id            INTEGER NOT NULL REFERENCES bugs,
  product_id        INTEGER NOT NULL REFERENCES products,
  PRIMARY KEY       (bug_id, product_id)
);

¶Ç,bugs Å×ÀÌºí¿¡´Â accounts Å×À̺íÀ» °¡¸®Å°´Â ¿ÜºÎ Ű ÂüÁ¶°¡ º¹¼ö Æ÷ÇԵǰԵµ ÁÖÀÇÇսôÙ. °¢°¢ÀÇ ¿ÜºÎ Ű´Â, ±× ¹ö±×¿¡ ´ëÇØ¼­ accounts Å×À̺íÀÇ ´Ù¸¥ ÇàÀ» ÂüÁ¶Çϱ⵵ ÇÕ´Ï´Ù.

»ùÇà µ¥ÀÌŸº£À̽ºÀÇ ¹°¸® µ¥ÀÌÅÍ ¸ðµ¨Àº, ´ÙÀ½ÀÇ ±×¸²°ú °°ÀÌ µË´Ï´Ù.

10.1.3. Äõ¸® °á°úÀÇ Àбâ

¿©±â¿¡¼­´Â,SELECT Äõ¸®¸¦ ½ÇÇàÇØ ±× °á°ú¸¦ ÃëµæÇϱâ À§ÇÑ ¾î´ðÅÍÀÇ ¸Þ¼Òµå¿¡ ´ëÇØ ¼³¸íÇÕ´Ï´Ù.

10.1.3.1. °á°ú ¼¼Æ® ÀüüÀÇ Ãëµæ

SQL ÀÇ SELECT Äõ¸®ÀÇ ½ÇÇà°ú ±× °á°úÀÇ ÃëµæÀ» ÇÑ ¹ø¿¡ ½Ç½ÃÇÏ·Á¸é fetchAll() ¸Þ¼Òµå¸¦ »ç¿ëÇÕ´Ï´Ù.

ÀÌ ¸Þ¼ÒµåÀÇ ÃÖÃÊÀÇ Àμö¿¡´Â,SELECT ¹®ÀåÀ» ¹®ÀÚ¿­·Î ÁöÁ¤ÇÕ´Ï´Ù. ȤÀº, ¹®ÀÚ¿­Àº ¾Æ´Ï°í Zend_Db_Select Ŭ·¡½ºÀÇ ¿ÀºêÁ§Æ®¸¦ ÁöÁ¤ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ¿ÀºêÁ§Æ®¸¦ °Ç³×ÁÖ¾úÀ» °æ¿ì´Â, ¾î´ðÅÍÀÇ ³»ºÎ¿¡¼­ ±×°ÍÀ» ÀÚµ¿ÀûÀ¸·Î SELECT ¹®ÀåÀÇ ¹®ÀÚ¿­·Î º¯È¯ÇÕ´Ï´Ù.

fetchAll() ±×¸®°í ±× ´ÙÀ½À¸·Î ÁöÁ¤ÇÏ´Â Àμö´Â, SQL ¹®ÁßÀÇ ÆÄ¶ó¹ÌÅÍ Ç÷¹À̽ºÈ¦´õ¸¦ ġȯÇÏ´Â °ªÀÇ ¹è¿­ÀÌ µË´Ï´Ù.

·Ê 10.9. fetchAll() ÀÇ »ç¿ë


<?php
$sql 
'SELECT * FROM bugs WHERE bug_id = ?';

$result $db->fetchAll($sql2);

10.1.3.2. ÆäÄ¡ ¸ðµåÀÇ º¯°æ

µðÆúÆ®¿¡¼­´Â,fetchAll() ÇÏÇàÀÇ ¹è¿­À» µ¹·ÁÁÝ´Ï´Ù.°¢ ÇàÀÇ µ¥ÀÌÅÍ´Â ¿¬»ó ¹è¿­ÀÌ µË´Ï´Ù. ·Ã¼­ ¹è¿­ÀÇ Å°´Â, ·Ä¸íÀ̳ª ȤÀº SELECT Äõ¸®·Î ÁöÁ¤ÇÑ ¿­ÀÇ º°¸íÀÌ µË´Ï´Ù.

µ¹¾Æ°¡ °ªÀÇ Çü½ÄÀ» ´Ù¸¥ °ÍÀ¸·Î ÇÏ·Á¸é setFetchMode() ¸Þ¼Òµå¸¦ »ç¿ëÇÕ´Ï´Ù. ´ëÀÀÇϰí ÀÖ´Â ¸ðµå´Â, ÀÌÇÏÀÇ Á¤¼ö·Î ³ªÅ¸³»Áö´Â °ÍÀÔ´Ï´Ù.

  • Zend_Db::FETCH_ASSOC: µ¥ÀÌÅ͸¦, ¿¬»ó ¹è¿­ÀÇ ¹è¿­·Î¼­ µ¹·ÁÁÝ´Ï´Ù. ¹è¿­ÀÇ Å°´Â, Ä÷³¸íÀ» ¹®ÀÚ¿­·Î ³ªÅ¸³½ °ÍÀÌ µË´Ï´Ù. À̰ÍÀº,Zend_Db_Adapter Ŭ·¡½ºÀÇ µðÆúÆ®ÀÇ ÆäÄ¡ ¸ðµåÀÔ´Ï´Ù.

    select ±×¸®°í ÃëµæÇÏ´Â À϶÷¾È¿¡ µ¿¸íÀÇ Ä÷³ÀÌ Æ÷ÇԵǾî ÀÖ´Â °æ¿ì (¿¹¸¦ µé¾î º¹¼ö Å×À̺íÀ» JOIN ÇßÀ» °æ¿ì µî) (Àº)´Â, ±× À̸§ÀÇ ¿£Æ®¸®´Â Çϳª ¹Û¿¡ Æ÷ÇÔµÇÁö ¾Ê½À´Ï´Ù. FETCH_ASSOC ¸ðµå¸¦ »ç¿ëÇÏ´Â °æ¿ì´Â, SELECT Äõ¸®·Î Ä÷³ÀÇ º°¸íÀ» ÁöÁ¤ÇÏ´Â µî, °á°úÀÇ ¹è¿­¿¡ À־ÀÇ Å°°¡ ÀÏÀǰ¡ µÇµµ·Ï(µíÀÌ) ÇÏÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù.

    µðÆúÆ®¿¡¼­´Â, ÀÌ·¯ÇÑ ¹®ÀÚ¿­Àº µ¥ÀÌŸº£À̽º µå¶óÀ̹ö·ÎºÎÅÍ µ¹·ÁÁÖ¾îÁö´Â °ÍÀ» ±×´ë·Î »ç¿ëÇÕ´Ï´Ù. Åë»óÀº, À̰ÍÀº RDBMS ¼­¹ö·ÎÀÇ Ä÷³¸íÀÌ µÇ°ÚÁö¿ä. ´ë¹®ÀÚ ¼Ò¹®ÀÚ¸¦ ÁöÁ¤ÇÏ·Á¸é ,Zend_Db::CASE_FOLDING ¿É¼ÇÀ» »ç¿ëÇÕ´Ï´Ù.À̰ÍÀº, ¾î´ðÅÍÀÇ ÀνºÅϽº¸¦ ÀÛ¼ºÇÒ ¶§¿¡ »ç¿ëÇÕ´Ï´Ù. ·Ê10.5. ¡¸ÆÑÅ丮·ÎÀÇ ´ë¹®ÀÚ ¼Ò¹®ÀÚ º¯È¯ ¿É¼ÇÀÇ ÁöÁ¤¡¹ (À»)¸¦ ÂüÁ¶ÇØ ÁֽʽÿÀ.

  • Zend_Db::FETCH_NUM: µ¥ÀÌÅ͸¦, ¹è¿­ÀÇ ¹è¿­·Î µ¹·ÁÁÝ´Ï´Ù. ¹è¿­Àº ¼öÄ¡ ÷ÀÚ Çü½ÄÀÌ µÇ¾î, Äõ¸®·Î ÁöÁ¤ÇÑ Â÷·Ê·ÎÀÇ À§Ä¡°¡ ۰¡ µË´Ï´Ù.

  • Zend_Db::FETCH_BOTH: µ¥ÀÌÅ͸¦, ¹è¿­ÀÇ ¹è¿­·Î µ¹·ÁÁÝ´Ï´Ù. ¹è¿­ÀÇ Å°´Â,FETCH_ASSOC ¸ðµå·Î ÀÌ¿ëÇÏ´Â ¹®ÀÚ¿­°ú FETCH_NUM ¸ðµå·Î ÀÌ¿ëÇÏ´Â ¼öÄ¡ÀÇ ¾çÂÊ ¸ðµÎ¸¦ Æ÷ÇÔÇÑ °ÍÀÌ µË´Ï´Ù. ¹è¿­ÀÇ ¿ä¼Ò¼ö°¡,FETCH_ASSOC (ÀÌ)³ª FETCH_NUM ÀÇ °æ¿ì°¡ ¹è°¡ µÇ´Â °Í¿¡ ÁÖÀÇÇսôÙ.

  • Zend_Db::FETCH_COLUMN: µ¥ÀÌÅ͸¦, °ªÀÇ ¹è¿­·Î µ¹·ÁÁÝ´Ï´Ù. ¹è¿­ÀÇ °¢ ¿ä¼ÒÀÇ °ªÀº, °á°ú ¼¼Æ®°¡ ÀÖ´Â ÇϳªÀÇ Ä÷³ÀÇ °ªÀÌ µË´Ï´Ù. µðÆúÆ®¿¡¼­´Â, À̰ÍÀº ÃÖÃÊÀÇ (0 ¹øÂ°ÀÇ) Ä÷³ÀÌ µË´Ï´Ù.

  • Zend_Db::FETCH_OBJ: µ¥ÀÌÅ͸¦, ¿ÀºêÁ§Æ®ÀÇ ¹è¿­·Î µ¹·ÁÁÝ´Ï´Ù. µðÆúÆ®ÀÇ Å¬·¡½º´Â,PHP ÀÇ ÆíÀÔ Å¬·¡½º stdClass µË´Ï´Ù.°á°ú ¼¼Æ®ÀÇ Ä÷³Àº, ÀÌ Å¬·¡½ºÀÇ ÇÁ·ÓÆÛƼ·Î¼­ ¾×¼¼½º ÇÒ ¼ö ÀÖ½À´Ï´Ù.

·Ê 10.10. setFetchMode() ÀÇ »ç¿ë


<?php
$db
->setFetchMode(Zend_Db::FETCH_OBJ);

$result $db->fetchAll('SELECT * FROM bugs WHERE bug_id = ?'2);

// $result (Àº)´Â ¿ÀºêÁ§Æ®ÀÇ ¹è¿­ÀÌ µË´Ï´Ù
echo $result[0]->bug_description;

10.1.3.3. ¿¬»ó ¹è¿­ Çü½ÄÀ¸·ÎÀÇ °á°ú ¼¼Æ®ÀÇ Ãëµæ

fetchAssoc() ¸Þ¼Òµå´Â, ÆäÄ¡ ¸ðµåÀÇ ¼³Á¤¿¡ °ü°è¾øÀÌ, °á°úÀÇ µ¥ÀÌÅ͸¦ ¿¬»ó ¹è¿­ÀÇ ¹è¿­·Î µ¹·ÁÁÝ´Ï´Ù.

·Ê 10.11. fetchAssoc() ÀÇ »ç¿ë


<?php
$db
->setFetchMode(Zend_Db::FETCH_OBJ);

$result $db->fetchAssoc('SELECT * FROM bugs WHERE bug_id = ?'2);

// $result (Àº)´Â, ÆäÄ¡ ¸ðµåÀÇ ÁöÁ¤°ú´Â °ü°è¾øÀÌ ¿¬»ó ¹è¿­ÀÇ ¹è¿­ÀÌ µË´Ï´Ù
echo $result[0]['bug_description'];

10.1.3.4. °á°ú ¼¼Æ®ÀÇ ´ÜÀÏÀÇ Ä÷³ÀÇ Ãëµæ

fetchCol() ¸Þ¼Òµå´Â, ÆäÄ¡ ¸ðµåÀÇ ¼³Á¤¿¡ °ü°è¾øÀÌ, °á°úÀÇ µ¥ÀÌÅ͸¦ °ªÀÇ ¹è¿­·Î µ¹·ÁÁÝ´Ï´Ù. À̰ÍÀº, Äõ¸®ÀÇ ÃÖÃÊÀÇ Ä÷³¸¸À» µ¹·ÁÁÝ´Ï´Ù. ±× ÀÌ¿ÜÀÇ Ä÷³ÀÇ ³»¿ëÀº ÆÄ±âµË´Ï´Ù. ´Ù¸¥ Ä÷³ÀÌ ÇÊ¿äÇÑ °æ¿ì´Â Ç×10.2.3.4. ¡¸°á°ú ¼¼Æ®·ÎºÎÅÍÀÇ ´ÜÀÏÀÇ Ä÷³ÀÇ Ãëµæ¡¹ (À»)¸¦ ÂüÁ¶ÇØ ÁֽʽÿÀ.

·Ê 10.12. fetchCol() ÀÇ »ç¿ë


<?php
$db
->setFetchMode(Zend_Db::FETCH_OBJ);

$result $db->fetchCol('SELECT bug_description, bug_id FROM bugs WHERE bug_id = ?'2);

// bug_description (À»)¸¦ Æ÷ÇÔÇØ,bug_id (Àº)´Â Æ÷ÇÔÇÏÁö ¾Ê½À´Ï´Ù
echo $result[0];

10.1.3.5. °á°ú ¼¼Æ®·ÎºÎÅÍÀÇ Å°/Ä¡ ÀÇ Æä¾îÀÇ Ãëµæ

fetchPairs() ¸Þ¼Òµå´Â, µ¥ÀÌÅ͸¦ Ű/Ä¡ ÀÇ Æä¾î (¿¬»ó ¹è¿­) ÀÇ ¹è¿­·Î µ¹·ÁÁÝ´Ï´Ù. ÀÌ ¿¬»ó ¹è¿­ÀÇ Å°´Â,SELECT Äõ¸®°¡ µ¹·ÁÁÖ´Â ÃÖÃÊÀÇ Ä÷³ÀÇ °ªÀÌ µË´Ï´Ù. ¶Ç, ¿¬»ó ¹è¿­ÀÇ °ªÀº,SELECT Äõ¸®°¡ µ¹·ÁÁÖ´Â µÎ¹øÂ°ÀÇ Ä÷³ÀÇ °ªÀÌ µË´Ï´Ù. Äõ¸®·ÎºÎÅÍ µ¹·ÁÁÖ¾îÁö´Â ±× ¿ÜÀÇ Ä÷³Àº ÆÄ±âµË´Ï´Ù.

SELECT Äõ¸®¸¦ Àß ¼³°èÇØ, ÃÖÃÊÀÇ Ä÷³ÀÇ °ªÀÌ ÀÏÀǰ¡ µÇµµ·Ï(µíÀÌ) ÇÏÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù. ¸¸¾à ÃÖÃÊÀÇ Ä÷³¿¡ Áߺ¹ ÇÏ´Â °ªÀÌ ÀÖÀ¸¸é, ¿¬»ó ¹è¿­ÀÇ ¿£Æ®¸®°¡ µ¡¾²±âµÇ¾î ¹ö¸³´Ï´Ù.

·Ê 10.13. fetchPairs() ÀÇ ¿¹


<?php
$db
->setFetchMode(Zend_Db::FETCH_OBJ);

$result $db->fetchPairs('SELECT bug_id, bug_status FROM bugs');

echo 
$result[2];

10.1.3.6. °á°ú ¼¼Æ®·ÎºÎÅÍÀÇ ´ÜÀÏÀÇ ÇàÀÇ Ãëµæ

fetchRow() ¸Þ¼Òµå´Â, °á°úÀÇ µ¥ÀÌÅ͸¦ ÇöÀçÀÇ ÆäÄ¡ ¸ðµå·Î µ¹·ÁÁÝ´Ï´Ù. ´ÜÁö, µ¹·ÁÁÖ´Â °ÍÀº °á°ú ¼¼Æ®·ÎºÎÅÍ ÃëµæÇÑ ÃÖÃÊÀÇ ÇุÀÔ´Ï´Ù.

·Ê 10.14. fetchRow() ÀÇ »ç¿ë


<?php
$db
->setFetchMode(Zend_Db::FETCH_OBJ);

$result $db->fetchRow('SELECT * FROM bugs WHERE bug_id = 2');

// $result (Àº)´Â ¿ÀºêÁ§Æ®ÀÇ ¹è¿­ÀÌ ¾Æ´Ï°í, ´Ü¼øÇÑ ¿ÀºêÁ§Æ®°¡ µË´Ï´Ù
echo $result->bug_description;

10.1.3.7. °á°ú ¼¼Æ®·ÎºÎÅÍÀÇ ´ÜÀÏÀÇ ½ºÄ®¶óÄ¡ÀÇ Ãëµæ

fetchOne() ¸Þ¼Òµå´Â fetchRow() (¿Í)°ú fetchCol() (À»)¸¦ Á¶ÇÕÇÑ °Í °°Àº °ÍÀÔ´Ï´Ù. °á°ú ¼¼Æ®·ÎºÎÅÍÀÇ ÃÖÃÊÀÇ ÇàÀ¸·ÎºÎÅÍ, ÃÖÃÊÀÇ Ä÷³ÀÇ °ª¸¸À» µ¹·ÁÁÝ´Ï´Ù. µû¶ó¼­, ÀÌ ¸Þ¼ÒµåÀÇ µ¹¾Æ°¡ °ªÀº ¹è¿­À̳ª ¿ÀºêÁ§Æ®´Â ¾Æ´Ï°í ´ÜÀÏÀÇ ½ºÄ®¶óÄ¡°¡ µË´Ï´Ù.

·Ê 10.15. fetchOne() ÀÇ »ç¿ë¹ý


<?php
$result 
$db->fetchOne('SELECT bug_status FROM bugs WHERE bug_id = 2');

// À̰ÍÀº ´Ü¼øÇÑ ¹®ÀÚ¿­ÀÌ µË´Ï´Ù
echo $result;

10.1.4. µ¥ÀÌŸº£À̽º¿¡ÀÇ º¯°æÀÇ ¼­µÎ

¾î´ðÅÍ Å¬·¡½º¸¦ »ç¿ëÇϰí, »õ·Î¿î µ¥ÀÌÅ͸¦ µ¥ÀÌŸº£À̽º¿¡ ¾²°Å³ª ±âÁ¸ÀÇ µ¥ÀÌÅÍ·Î º¯°æÀ» ´õÇϰųª ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿©±â¿¡¼­´Â, ±×°ÍÀ» À§ÇÑ ¸Þ¼Òµå¿¡ ´ëÇØ ¼³¸íÇÕ´Ï´Ù.

10.1.4.1. µ¥ÀÌÅÍÀÇ »ðÀÔ

µ¥ÀÌŸº£À̽ºÀÇ Å×ÀÌºí¿¡ »õ·Î¿î ÇàÀ» Ãß°¡ÇÏ·Á¸é , insert() ¸Þ¼Òµå¸¦ »ç¿ëÇÕ´Ï´Ù. ÃÖÃÊÀÇ Àμö´Â Å×À̺í¸íÀ» ³ªÅ¸³»´Â ¹®ÀÚ¿­·Î, ±× ´ÙÀ½ÀÇ Àμö´Â Ä÷³¸í°ú µ¥ÀÌÅÍÀÇ °ªÀ» °ü·ÃÁöÀº ¿¬»ó ¹è¿­ÀÌ µË´Ï´Ù.

·Ê 10.16. Å×ÀÌºí¿¡ÀÇ µ¥ÀÌÅÍÀÇ »ðÀÔ


<?php
$data 
= array(
    
'created_on'      => '2007-03-22',
    
'bug_description' => 'Something wrong',
    
'bug_status'      => 'NEW'
);

$db->insert('bugs'$data);

µ¥ÀÌÅÍÀÇ ¹è¿­·Î ÁöÁ¤ÇÏÁö ¾Ê¾Ò´ø Ä÷³¿¡ ´ëÇØ¼­´Â µ¥ÀÌŸº£À̽º¿¡ ´ëÇØ¼­ ¾Æ¹«°Íµµ Áö½ÃÇÏÁö ¾Ê½À´Ï´Ù. Áï,SQL ÀÇ INSERT ¹®ÀåÀ¸·Î ¿­À» ÁöÁ¤ÇÏÁö ¾Ê¾Ò´ø °æ¿ì¿Í °°Àº °Åµ¿ÀÌ µË´Ï´Ù. DEFAULT ±¸°¡ ¼³Á¤µÇ¾î ÀÖÀ¸¸é ±× °ªÀÌ Ãß°¡µÇ¾î ¼³Á¤µÇ¾î ÀÖÁö ¾ÊÀ¸¸é NULL ÀΠäµË´Ï´Ù.

µðÆúÆ®¿¡¼­´Â, µ¥ÀÌÅÍ ¹è¿­ÀÇ °ªÀ» »ðÀÔÇÒ ¶§ ÆÄ¶ó¹ÌÅ͸¦ »ç¿ëÇÕ´Ï´Ù. À̰Ϳ¡ ÀÇÇØ, ¾î¶² Á¾·ùÀÇ ½ÃÅ¥·¯Æ¼ ¹®Á¦°¡ ¹ß»ýÇÒ °¡´É¼ºÀ» °æ°¨ÇÕ´Ï´Ù. µ¥ÀÌÅÍ ¹è¿­·Î ÁöÁ¤ÇÏ´Â µ¥ÀÌÅÍ¿¡ ´ëÇØ¼­´Â, À̽ºÄÉÀÌÇÁ³ª ÄíÆ® 󸮸¦ °í·ÁÇÒ ÇÊ¿ä´Â ¾ø½À´Ï´Ù.

µ¥ÀÌÅÍ ¹è¿­¾ÈÀÇ °ªÀ» SQL ÀÇ ½ÄÀ¸·Î¼­ Ãë±ÞÇØ, ÄíÆ® ÇÏ°í ½ÍÁö ¾ÊÀº °æ¿ìµµ ÀÖÀ»Áöµµ ¸ð¸¨´Ï´Ù. µðÆúÆ®¿¡¼­´Â, ¹®ÀÚ¿­·Î¼­ °Ç³×ÁØ °ªÀº ¸ðµÎ ¹®ÀÚ¿­ ¸®ÅÍ·²·Î¼­ ´Ù·ç¾îÁý´Ï´Ù. ±× °ªÀÌ SQL ÀÇ ½ÄÀÎ °Í, Áï ÄíÆ® ÇØ¼± ¾È µÈ´Ù°í ÇÏ´Â °ÍÀ» ÁöÁ¤ÇÏ·Á¸é , ¹®ÀÚ¿­Àº ¾Æ´Ï°í Zend_Db_Expr ÇüÅÂÀÇ ¿ÀºêÁ§Æ®¸¦ µ¥ÀÌÅÍ ¹è¿­¿¡ °Ç³×ÁÝ´Ï´Ù.

·Ê 10.17. Å×ÀÌºí¿¡ÀÇ ½ÄÀÇ »ðÀÔ


<?php
$data 
= array(
    
'created_on'      => new Zend_Db_Expr('CURDATE()'),
    
'bug_description' => 'Something wrong',
    
'bug_status'      => 'NEW'
);

$db->insert('bugs'$data);

10.1.4.2. »ý¼ºµÈ °ªÀÇ Ãëµæ

RDBMS ¿¡ µû¶ó¼­´Â, ÁÖŰÀÇ ÀÚµ¿ ÀÎÅ©¸®¸ÕÆ®(increment)¸¦ ¼­Æ÷Æ®Çϰí ÀÖ´Â °Íµµ ÀÖ½À´Ï´Ù. ÀÌ ¹æ¹ýÀ¸·Î Á¤ÀÇÇÑ Å×ÀÌºí¿¡ »õ·Î¿î ÇàÀ» INSERT ±×·¯ÀÚ(¸é), ÁÖŰÀÇ °ªÀÌ ÀÚµ¿ÀûÀ¸·Î »ý¼ºµË´Ï´Ù. insert() ¸Þ¼ÒµåÀÇ µ¹¾Æ°¡ °ªÀº, ¸¶Áö¸·¿¡ Ãß°¡µÇ¾ú´Ù ID ±×·³¾ø½À´Ï´Ù. ±× Å×ÀÌºí¿¡´Â ÀÚµ¿ ÀÎÅ©¸®¸ÕÆ®(increment)ÀÇ Ä÷³ÀÌ ¾øÀ»Áöµµ ¸ð¸£±â ¶§¹®ÀÔ´Ï´Ù. µ¹¾Æ°¡ °ªÀº, º¯°æµÈ Çà¼ö (Åë»óÀº 1 ÀÔ´Ï´Ù) µË´Ï´Ù.

±× Å×À̺í·Î ÀÚµ¿ ÀÎÅ©¸®¸ÕÆ®(increment)ÀÇ ÁÖ۸¦ Á¤ÀÇÇϰí ÀÖ´Â °æ¿ì´Â, µ¥ÀÌÅ͸¦ Ãß°¡ÇÑ ´ÙÀ½¿¡ lastInsertId() ¸Þ¼Òµå¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.ÀÌ ¸Þ¼Òµå´Â, ÇöÀçÀÇ µ¥ÀÌŸº£À̽º Á¢¼Ó¿¡ ´ëÇØ ¸¶Áö¸·¿¡ ÀÚµ¿ »ý¼ºµÈ °ªÀ» µ¹·ÁÁÝ´Ï´Ù.

·Ê 10.18. ÀÚµ¿ ÀÎÅ©¸®¸ÕÆ®(increment)ÀÇ Å°¿¡ À־ÀÇ lastInsertId() ÀÇ »ç¿ë¹ý


<?php
$db
->insert('bugs'$data);

// ÀÚµ¿ ÀÎÅ©¸®¸ÕÆ®(increment)ÀÇ Ä÷³À¸·Î ¸¶Áö¸·¿¡ »ý¼ºµÈ °ªÀ» µ¹·ÁÁÝ´Ï´Ù
$id $db->lastInsertId();

RDBMS ¿¡ µû¶ó¼­´Â, ¼ø¼­¸¦ ¼­Æ÷Æ®Çϰí ÀÖ´Â °Íµµ ÀÖ½À´Ï´Ù. ¼ø¼­¸¦ »ç¿ëÇϰí, ÁÖŰ¿ëÀÇ ÀÏÀÇÀÎ °ªÀ» »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. ¼ø¼­¸¦ ¼­Æ÷Æ®Çϱâ À§Çؼ­,lastInsertId() ±×·³ ¿É¼ÇÀÇ ¹®ÀÚ¿­ Àμö¸¦ 2 °³ ¹Þ¾Æ µéÀ̵µ·Ï(µíÀÌ) Çϰí ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ Àμö¿¡´Â, °¢°¢ Å×À̺í¸í°ú Ä÷³¸íÀ» ÁöÁ¤ÇÕ´Ï´Ù. ¼ø¼­ÀÇ À̸§Àº, ÀÌ Å×À̺í¸í°ú Ä÷³¸íÀ» ¿¬°áÇßÁö¸¸ ÈÄ¿¡ "_seq" (À»)¸¦ ºÎ°¡ÇÑ °ÍÀÌ µË´Ï´Ù.À̰ÍÀº,PostgreSQL ÇÏÁö¸¸ SERIAL ÇüÅÂÀÇ Ä÷³¿¡ ´ëÇØ¼­ ÀÚµ¿ »ý¼ºÇÏ´Â ¼ø¼­¸íÀÇ ±Ô¾à¿¡ ÀǰÅÇϰí ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î,"bugs" Å×À̺íÀÇ ÁÖŰ Ä÷³ÀÌ "bug_id" ÀÎ °æ¿ì´Â,"bugs_bug_id_seq" (ÀÌ)¶ó´Â À̸§ÀÇ ¼ø¼­¸¦ »ç¿ëÇÏ°Ô µË´Ï´Ù.

·Ê 10.19. ¼ø¼­¿¡ À־ÀÇ lastInsertId() ÀÇ »ç¿ë¹ý


<?php
$db
->insert('bugs'$data);

// ¼ø¼­ 'bugs_bug_id_seq' ÇÏÁö¸¸ ¸¶Áö¸·¿¡ »ý¼ºÇÑ °ªÀ» µ¹·ÁÁÝ´Ï´Ù
$id $db->lastInsertId('bugs''bug_id');

// À̰ÍÀº, ¼ø¼­ 'bugs_seq' ÇÏÁö¸¸ ¸¶Áö¸·¿¡ »ý¼ºÇÑ °ªÀ» µ¹·ÁÁÝ´Ï´Ù
$id $db->lastInsertId('bugs');

¸¸¾à ÀÌ ¸í¸í ±Ô¾à°ú´Â ´Ù¸¥ À̸§ÀÇ ¼ø¼­¸¦ »ç¿ëÇϰí ÀÖ´Â °æ¿ì´Â, ´ë½Å¿¡ lastSequenceId() ¸Þ¼Òµå¸¦ »ç¿ëÇÕ´Ï´Ù. ÀÌ ¸Þ¼ÒµåÀÇ Àμö¿¡´Â, ¼ø¼­ÀÇ À̸§À» Á÷Á¢ ÁöÁ¤ÇÕ´Ï´Ù.

·Ê 10.20. lastSequenceId() ÀÇ »ç¿ë¹ý


<?php
$db
->insert('bugs'$data);

// ¼ø¼­ 'bugs_id_gen' ÇÏÁö¸¸ ¸¶Áö¸·¿¡ »ý¼ºÇÑ °ªÀ» µ¹·ÁÁÝ´Ï´Ù
$id $db->lastSequenceId('bugs_id_gen');

¼ø¼­¸¦ ¼­Æ÷Æ®Çϰí ÀÖÁö ¾Ê´Ù RDBMS, ¿¹¸¦ µé¾î MySQL (ÀÌ)³ª Microsoft SQL Server,SQLite µîÀÇ °æ¿ì, lastInsertId() ¸Þ¼ÒµåÀÇ Àμö´Â ¹«½ÃµË´Ï´Ù. ÀÌ ¸Þ¼ÒµåÀÇ µ¹¾Æ°¡ °ªÀº, ÇöÀçÀÇ Á¢¼ÓÀ¸·Î ¸¶Áö¸·¿¡ ½ÇÇàµÇ¾ú´Ù INSERT Á¶ÀÛÀÌ »ý¼ºÇÑ °ªÀÌ µË´Ï´Ù.¶Ç, ÀÌ·¯ÇÑ RDBMS ±×·³ lastSequenceId() ¸Þ¼ÒµåÀÇ µ¹¾Æ°¡ °ªÀº Ç×»ó null µË´Ï´Ù.

[ÁÖÀÇ] "SELECT MAX(id) FROM table" ÀÚ ¾ÈµË´Ï±î?

ºÐ¸íÈ÷ ÀÌ Äõ¸®´Â, ¸¶Áö¸·¿¡ Å×ÀÌºí¿¡ Ãß°¡µÈ ÁÖŰÀÇ °ªÀ» µ¹·ÁÁֱ⵵ ÇÕ´Ï´Ù. ±×·¯³ª À̰ÍÀº, º¹¼öÀÇ Å¬¶óÀÌ¾ðÆ®°¡ µ¥ÀÌŸº£À̽º¿¡ ·¹Äڵ带 Ãß°¡ÇÑ´Ù°í Çϴ ȯ°æ¿¡¼­´Â ¾ÈÀüÇÏÁö´Â ¾Ê½À´Ï´Ù. Áï, µ¥ÀÌÅ͸¦ Ãß°¡ÇÏ°í ³ª¼­ MAX(id) ÀÇ °ªÀ» ÃëµæÇÒ ¶§±îÁö ¿¡ ´Ù¸¥ Ŭ¶óÀÌ¾ðÆ®°¡ ´Ù¸¥ µ¥ÀÌÅ͸¦ Ãß°¡ÇÒ °¡´É¼ºÀÌ ÀÖ´Â °ÍÀÔ´Ï´Ù. ÀÌ °æ¿ì, Äõ¸®°¡ µ¹·ÁÁÖ´Â °á°ú´Â ´ç½ÅÀÌ ½ÇÁ¦·Î Ãß°¡ÇÑ ÇàÀÇ ID °ú´Â ´Þ¸®, ´©±º°¡ ´Ù¸¥ »ç¶÷ÀÌ Ãß°¡ÇÑ ÇàÀÇ ID (ÀÌ)°¡ µÇ¾î ¹ö¸³´Ï´Ù. °Ô´Ù°¡, ¸¸¾à ±×·¯ÇÑ »óȲÀÌ µÇ¾î ÀÖ¾ú´Ù°í ÇØµµ ´ç½Å¿¡°Ô´Â ±×°ÍÀ» ¾Ë ¼ö ¾ø½À´Ï´Ù.

¿¹¸¦ µé¾î "repeatable read" (¿Í)°ú °°Àº Æ®·£Àè¼Ç(transaction) ºÐ¸® ¸ðµå¸¦ »ç¿ëÇϸé, ÀÌ À§Ç輺À» ÁÙÀÏ ¼ö ÀÖ½À´Ï´Ù.±×·¯³ª, ÀÌ ·¹º§ÀÇ Æ®·£Àè¼Ç(transaction) ºÐ¸®¸¦ ¼­Æ÷Æ®Çϰí ÀÖÁö ¾Ê´Ù RDBMS µµ ÀÖ½À´Ï´Ù.¶Ç, ±× ¾îÇø®ÄÉÀÌ¼Ç ÀÚü°¡ ´õ ´À½¼ÇÑ ·¹º§ÀÇ Æ®·£Àè¼Ç(transaction) ºÐ¸® ¸ðµå¸¦ »óÁ¤ÇØ ÀÛ¼ºµÇ°í ÀÖÀ»Áöµµ ¸ð¸¨´Ï´Ù.

°Ô´Ù°¡ »õ·Î¿î ÁÖŰÀÇ °ªÀ» »ý¼ºÇÒ ¶§¿¡ "MAX(id)+1" (¿Í)°ú °°Àº ½ÄÀ» »ç¿ëÇÏ´Â °Íµµ ¶È°°ÀÌ À§ÇèÇÕ´Ï´Ù.µÎ Ŭ¶óÀÌ¾ðÆ®·ÎºÎÅÍ µ¿½Ã¿¡ ÀÌ Äõ¸®¸¦ ½ÇÇàÇϸé, ¾î´ÀÂÊÀ̳ª °°Àº °ªÀ» ÃëµæÇÏ°Ô µÇ¾î, °°Àº °ªÀ¸·Î INSERT (À»)¸¦ ÇàÇÏ°Ô µÇ¾î ¹ö¸³´Ï´Ù.

¾î¶² RDBMS ±×·¸Áö¸¸, ÀÏÀÇÀÎ °ªÀ» »ý¼ºÇÏ´Â ±â´ÉÀ̳ª ¸¶Áö¸·¿¡ »ý¼ºÇÑ °ªÀ» µ¹·ÁÁÖ´Â ±â´ÉÀº °¡Áö°í ÀÖ½À´Ï´Ù. ÀÌ ±â´ÉÀº Æ®·£Àè¼Ç(transaction) ºÐ¸® ·¹º§ (¿Í)´Â °ü°è¾ø´Â °ÍÀ¸·Î ±â´ÉÇÒ °ÍÀ̹ǷÎ, µÎ Ŭ¶óÀÌ¾ðÆ®·Î °°Àº °ªÀÌ Áߺ¹ ÇØ ¹ö¸± °ÍÀº ¾ø½À´Ï´Ù. ¶Ç, ´Ù¸¥ Ŭ¶óÀÌ¾ðÆ®·Î ÀÛ¼ºÇÑ °ªÀÌ ´ç½ÅÀÇ Á¢¼ÓÀ¸·Î ¡¸¸¶Áö¸·¿¡ »ý¼ºÇÑ °ª¡¹À¸·Î ÇØ¼­ µ¹·ÁÁÖ¾îÁö±âµµ ¾ø½À´Ï´Ù.

10.1.4.3. µ¥ÀÌÅÍÀÇ °»½Å

µ¥ÀÌŸº£À̽ºÀÇ Å×À̺íÀÇ ÇàÀ» °»½ÅÇÏ·Á¸é , ¾î´ðÅÍÀÇ update() ¸Þ¼Òµå¸¦ »ç¿ëÇÕ´Ï´Ù.ÀÌ ¸Þ¼Òµå¿¡ÀÇ Àμö´Â 3 °³ÀÔ´Ï´Ù.¿ì¼± óÀ½Àº Å×À̺íÀÇ À̸§, ±× ´ÙÀ½Àº Ä÷³¸íÀ¸·Î »õ·Î¿î °ªÀ» °ü·Ã ÁöÀº ¿¬»ó ¹è¿­ÀÌ µË´Ï´Ù.

¹è¿­·Î ÁöÁ¤ÇÑ °ªÀº, ¹®ÀÚ¿­ ¸®ÅÍ·²·Î¼­ ´Ù·ç¾îÁý´Ï´Ù. µ¥ÀÌÅÍ ¹è¿­·Î SQL ÀÇ ½ÄÀ» Ãë±ÞÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ¼­´Â Ç×10.1.4.1. ¡¸µ¥ÀÌÅÍÀÇ »ðÀÔ¡¹ (À»)¸¦ ÂüÁ¶ÇØ ÁֽʽÿÀ.

3¹øÂ°ÀÇ Àμö´Â,SQL ÀÇ ½ÄÀ» ¹®ÀÚ¿­·Î ÁöÁ¤ÇÕ´Ï´Ù. À̰ÍÀÌ, º¯°æÇÏ´Â ÇàÀ» Á¼È÷±â À§ÇÑ Á¶°ÇÀÌ µË´Ï´Ù. ¿©±â¼­ ÁöÁ¤ÇÑ °ªÀ̳ª ½Äº°ÀÚ¿¡ ´ëÇØ¼­´Â, ÄíÆ®³ª À̽ºÄÉÀÌÇÁ´Â ÇàÇÏÁö ¾Ê½À´Ï´Ù. ¾î¶°ÇÑ µ¿ÀûÀÎ °ªÀ» »ç¿ëÇÏ´Â °æ¿ì´Â, ±× ³»¿ëÀÌ ¾ÈÀüÇÑ °ÍÀ» È®ÀÎÇϵµ·Ï ÇսôÙ. Ç×10.1.5. ¡¸°ªÀ̳ª ½Äº°ÀÚÀÇ ÄíÆ®¡¹ ±×¸®°í ¼³¸íÇϰí ÀÖ´Â ¸Þ¼Òµå¸¦ »ç¿ëÇϸé ÁÁÀ» °ÍÀÔ´Ï´Ù.

ÀÌ ¸Þ¼ÒµåÀÇ µ¹¾Æ°¡ °ªÀº, °»½Å Á¶ÀÛ¿¡ ÀÇÇØ¼­ º¯°æµÈ ÇàÀÇ ¼ö°¡ µË´Ï´Ù.

·Ê 10.21. ÇàÀÇ °»½Å


<?php
$data 
= array(
    
'updated_on'      => '2007-03-23',
    
'bug_status'      => 'FIXED'
);

$n $db->update('bugs'$data'bug_id = 2');

3¹øÂ°ÀÇ Àμö¸¦ »ý·« ÇßÀ» °æ¿ì´Â, Å×À̺íÀÇ ¸ðµç ÇàÀÌ ÁöÁ¤ÇÑ °ªÀ¸·Î °»½ÅµË´Ï´Ù.

3¹øÂ°ÀÇ Àμö¿¡ ¹®ÀÚ¿­ÀÇ ¹è¿­À» ÁöÁ¤Çϸé, °¢ ¿ä¼ÒÀÇ ³»¿ëÀ» AND ¿¬»êÀÚ·Î ¿¬°áÇØ »ç¿ëÇÕ´Ï´Ù.

·Ê 10.22. ½ÄÀÇ ¹è¿­À» ÁöÁ¤ÇÏ´Â °Í¿¡ ÀÇÇÑ ÇàÀÇ °»½Å


<?php
$data 
= array(
    
'updated_on'      => '2007-03-23',
    
'bug_status'      => 'FIXED'
);

$where[] = "reported_by = 'goofy'";
$where[] = "bug_status = 'OPEN'";

$n $db->update('bugs'$data$where);

// ½ÇÇàµÈ´Ù SQL (Àº)´Â, ÀÌ¿Í °°ÀÌ µË´Ï´Ù
//  UPDATE "bugs" SET "update_on" = '2007-03-23', "bug_status" = 'FIXED'
//  WHERE ("reported_by" = 'goofy') AND ("bug_status" = 'OPEN')

10.1.4.4. ÇàÀÇ »èÁ¦

µ¥ÀÌŸº£À̽ºÀÇ Å×ÀÌºí¿¡¼­ ÇàÀ» »èÁ¦ÇÏ·Á¸é delete() ¸Þ¼Òµå¸¦ »ç¿ëÇÕ´Ï´Ù.ÀÌ ¸Þ¼Òµå¿¡ °Ç³×ÁÖ´Â Àμö´Â 2 °³·Î, ÃÖÃÊÀÇ Àμö´Â Å×À̺í¸íÀ» ³ªÅ¸³»´Â ¹®ÀÚ¿­ÀÔ´Ï´Ù.

µÎ¹øÂ°ÀÇ Àμö´Â,SQL ÀÇ ½ÄÀ» ¹®ÀÚ¿­·Î ÁöÁ¤ÇÕ´Ï´Ù. À̰ÍÀÌ, »èÁ¦ÇÏ´Â ÇàÀ» Á¼È÷±â À§ÇÑ Á¶°ÇÀÌ µË´Ï´Ù. ¿©±â¼­ ÁöÁ¤ÇÑ °ªÀ̳ª ½Äº°ÀÚ¿¡ ´ëÇØ¼­´Â, ÄíÆ®³ª À̽ºÄÉÀÌÇÁ´Â ÇàÇÏÁö ¾Ê½À´Ï´Ù. ¾î¶°ÇÑ µ¿ÀûÀÎ °ªÀ» »ç¿ëÇÏ´Â °æ¿ì´Â, ±× ³»¿ëÀÌ ¾ÈÀüÇÑ °ÍÀ» È®ÀÎÇϵµ·Ï ÇսôÙ. Ç×10.1.5. ¡¸°ªÀ̳ª ½Äº°ÀÚÀÇ ÄíÆ®¡¹ ±×¸®°í ¼³¸íÇϰí ÀÖ´Â ¸Þ¼Òµå¸¦ »ç¿ëÇϸé ÁÁÀ» °ÍÀÔ´Ï´Ù.

ÀÌ ¸Þ¼ÒµåÀÇ µ¹¾Æ°¡ °ªÀº, »èÁ¦ Á¶ÀÛ¿¡ ÀÇÇØ¼­ º¯°æµÈ ÇàÀÇ ¼ö°¡ µË´Ï´Ù. ¡¡

·Ê 10.23. ÇàÀÇ »èÁ¦


<?php
$n 
$db->delete('bugs''bug_id = 3');

µÎ¹øÂ°ÀÇ Àμö¸¦ »ý·« ÇßÀ» °æ¿ì´Â, Å×À̺íÀÇ ¸ðµç ÇàÀ» »èÁ¦ÇÕ´Ï´Ù.

µÎ¹øÂ°ÀÇ Àμö¿¡ ¹®ÀÚ¿­ÀÇ ¹è¿­À» ÁöÁ¤Çϸé, °¢ ¿ä¼ÒÀÇ ³»¿ëÀ» AND ¿¬»êÀÚ·Î ¿¬°áÇØ »ç¿ëÇÕ´Ï´Ù.

10.1.5. °ªÀ̳ª ½Äº°ÀÚÀÇ ÄíÆ®

SQL (À»)¸¦ ÀÛ¼ºÇÒ ¶§ ,PHP ÀÇ º¯¼öÀÇ °ªÀ» SQL ÀÇ ½Ä¿¡¼­ »ç¿ëÇØ¾ß ÇÏ´Â °Íµµ ÀÖ°ÚÁö¿ä. À̰ÍÀº À§ÇèÇÑ Ã³¸®ÀÔ´Ï´Ù.¿Ö³ÄÇϸé,PHP ÀÇ ¹®ÀÚ¿­¾È¿¡´Â ¿¹¸¦ µé¾î ÄíÆ® ±âÈ£¿Í °°Àº Ư¼ö ¹®ÀÚ°¡ Æ÷ÇԵǾî ÀÖ´Â ÀÏÀÌ ÀÖ¾î, ¿Ï¼ºµÈ´Ù SQL ÇÏÁö¸¸ ÀÌ»óÇÑ °ÍÀÌ µÇ¾î ¹ö¸± °¡´É¼ºÀÌ Àֱ⠶§¹®ÀÔ´Ï´Ù. ¿¹¸¦ µé¾î, ÀÌÇÏÀÇ ÄÚµå·Î ÀÛ¼ºÇß´Ù SQL (Àº)´Â, ÄíÆ® ¹®ÀÚÀÇ ´ëÀÀÀÌ ÀÌ»óÇÑ °ÍÀÌ µË´Ï´Ù.


$name = "O'Reilly";
$sql = "SELECT * FROM bugs WHERE reported_by = '$name'";

echo $sql;
// SELECT * FROM bugs WHERE reported_by = 'O'Reilly'

ÇÑÃþ ´õ ³ª»Û °Í¿¡, ÀÌ·¯ÇÑ Äڵ带 ¾Ç¿ë µÇ¸é ´ç½ÅÀÇ ¾îÇø®ÄÉÀ̼ÇÀÌ °ø°ÝÀÇ ÇÇÇØ¸¦ ¹Þ°Ô µÉÁöµµ ¸ð¸¨´Ï´Ù. PHP ÀÇ º¯¼öÀÇ °ªÀ» HTTP ÆÄ¶ó¹ÌÅ͵¼­ ÁöÁ¤ÇÒ ¼ö ÀÖÀ¸¸é, SQL Äõ¸®¸¦ Á¶ÀÛÇØ ¿¹±âÄ¡ ¸øÇÑ ÀÏÀ» Çϼйö¸± °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù (¿¹¸¦ µé¾î, ±× »ç¶÷ÀÇ ±ÇÇÑ¿¡¼­´Â ¾Èº¸¿©¾ß ÇÒ µ¥ÀÌÅ͸¦ µéÄÑ ¹ö¸®´Â µî). À̰ÍÀº, ¾îÇø®ÄÉÀ̼ÇÀÇ ½ÃÅ¥·¯Æ¼ ¹®Á¦·Î¼­´Â ¸Å¿ì À¯¸íÇÑ ¼ö¹ýÀ¸·Î, "SQL ÀÎÁ§¼Ç" (À¸)·Î ºÒ¸®°í ÀÖ½À´Ï´Ù ( http://ja.wikipedia.org/wiki/SQL%E3%82%A4%E3%83%B3%E3%82%B8%E3%82%A7%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3 (À»)¸¦ ÂüÁ¶ÇØ ÁֽʽÿÀ).

Zend_Db Adapter Ŭ·¡½ºÀÇ Á¦°øÇÏ´Â Æí¸®ÇÑ ÇÔ¼ö¸¦ »ç¿ëÇϸé, ´ç½ÅÀÇ PHP Äڵ尡 SQL ÀÎÁ§¼Ç °ø°ÝÀ» ¹Þ´Â À§Ç輺À» °æ°¨ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ °ø°ÝÀ» ȸÇÇÇÏ´Â ¹æ¹ýÀº,PHP ÀÇ ÄíÆ® ¹®ÀÚ¿Í °°Àº Ư¼ö ¹®ÀÚ¸¦ ¿Ã¹Ù¸£°Ô À̽ºÄÉÀÌÇÁ ÇÏ°í ³ª¼­ SQL ¿¡ »ç¿ëÇÏ´Â °ÍÀÔ´Ï´Ù. À̰Ϳ¡ ÀÇÇØ, °©ÀÚ±â (ȤÀº °íÀÇ·Î) SQL ¿¡ Ư¼ö ¹®ÀÚ°¡ ÆÄ¹¯Çô ¹ö¸®´Â °ÍÀ» ¸·½À´Ï´Ù.

10.1.5.1. quote() ÀÇ »ç¿ë¹ý

quote() ¸Þ¼Òµå´Â, Àμö·Î¼­ ¹®ÀÚ¿­À» ¹Þ½À´Ï´Ù. ±×¸®°í ±× ¹®ÀÚ¿­¾ÈÀÇ Æ¯¼ö ¹®ÀÚ¸¦ À̽ºÄÉÀÌÇÁ ÇÑ ´ÙÀ½, ¾ç´ÜÀ» ´Ü¶ôÁö¾î ¹®ÀÚ·Î µÑ·¯½Ñ °ÍÀ» µ¹·ÁÁÝ´Ï´Ù. À̽ºÄÉÀÌÇÁ 󸮴Â, »ç¿ëÇϰí ÀÖ´Ù RDBMS ¿¡ ¸ÂÃß¾î ÀûÀýÈ÷ ÇàÇØÁý´Ï´Ù. ¹®ÀÚ¿­ÀÇ ¾ç´Ü¿¡ »ç¿ëÇÏ´Â ´Ü¶ô ¹®ÀÚ´Â, Ç¥ÁØÀÇ SQL ±×·³ ½Ì¸£Å©Æ® (') µË´Ï´Ù.

·Ê 10.24. quote() ÀÇ »ç¿ë¹ý


<?php
$name 
$db->quote("O'Reilly");
echo 
$name;
// 'O'Reilly'

$sql "SELECT * FROM bugs WHERE reported_by = $name";

echo 
$sql;
// SELECT * FROM bugs WHERE reported_by = 'O'Reilly'

quote() ÀÇ µ¹¾Æ°¡ °ª¿¡´Â, ¹®ÀÚ¿­ÀÇ ¾ç´Ü¿¡ ´Ü¶ôÁö¾î ¹®ÀÚ°¡ Ãß°¡µÇ°í ÀÖ´Â °Í¿¡ ÁÖÀÇÇսôÙ. À̰ÍÀº, ¿¹¸¦ µé¾î mysql_real_escape_string() (¿Í)°ú °°Àº À̽ºÄÉÀÌÇÁ¿ë ÇÔ¼öÀÇ °Åµ¿°ú´Â ´Ù¸¨´Ï´Ù.

°ªÀ» ÄíÆ® ÇÒ±î ÇÏÁö ¾ÊÀ»±î´Â,SQL ÀÇ µ¥ÀÌÅÍÇü¿¡ µû¶ó¼­ ´Ù¸¨´Ï´Ù. ¿¹¸¦ µé¾î, Á¤¼öÄ¡¸¦ ÄíÆ® ÇØ ¹ö¸®¸é ¼öÄ¡Çü Ä÷³À̳ª °è»ê½Ä¿¡¼­ ÀÌ¿ëÇÒ ¼ö ¾ø°Ô µÇ¾î ¹ö¸°´Ù°í ÇÑ´Ù RDBMS µµ ÀÖ½À´Ï´Ù.Áï, ´ÙÀ½°ú °°Àº SQL ÇÏÁö¸¸ ¿¡·¯°¡ µÇ¾î ¹ö¸®´Â ½ÇÀåÀÌ ÀÖ´Â °ÍÀÔ´Ï´Ù. ¿©±â¼­,intColumn ÀÇ µ¥ÀÌÅÍÇüÀº INTEGER ÀÎ °ÍÀ¸·Î ÇÕ´Ï´Ù.


SELECT * FROM atable WHERE intColumn = '123'

quote() ¸Þ¼Òµå·Î ¿É¼ÇÀÇ 2 ¹øÂ°ÀÇ Àμö¸¦ »ç¿ëÇϸé, SQL ÀÇ µ¥ÀÌÅÍÇü¿¡ µû¶ó ÄíÆ® ÇÒÁö¸¦ ¼±ÅÃÇÒ ¼ö ÀÖ½À´Ï´Ù.

·Ê 10.25. quote() (À¸)·ÎÀÇ SQL µ¥ÀÌÅÍÇüÀÇ ÁöÁ¤


<?php
$value 
'1234';
$sql 'SELECT * FROM atable WHERE intColumn = '
     
$db->quote($value'INTEGER');

°¢ Zend_Db_Adapter Ŭ·¡½º¿¡¼­´Â, ±× RDBMS ¿ë¹«ÀÇ SQL ¼öÄ¡ µ¥ÀÌÅÍÇüÀÇ À̸§ÀÌ ÄÚµåÈ­ µÇ°í ÀÖ½À´Ï´Ù. ±×°Íµé À̿ܿ¡µµ Zend_Db::INT_TYPE (ÀÌ)³ª Zend_Db::BIGINT_TYPE, ±×¸®°í Zend_Db::FLOAT_TYPE ±×·¸´Ù°í ÇÏ´Â Á¤¼ö°¡ ÁغñµÇ¾î ÀÖ¾î À̰͵éÀ» »ç¿ëÇϸé RDBMS ¿¡ ÀÇÁ¸ÇÏÁö ¾Ê´Â Äڵ带 ¾µ ¼ö ÀÖ½À´Ï´Ù.

Zend_Db_Table (Àº)´Â, Å×À̺íÀÇ Å°°¡ µÇ´Â Ä÷³À» »ç¿ëÇÒ ¶§ ÀÚµ¿ÀûÀ¸·Î SQL µ¥ÀÌÅÍÇüÀ» quote() (À¸)·Î ÁöÁ¤ÇÕ´Ï´Ù.

10.1.5.2. quoteInto() ÀÇ »ç¿ë¹ý

ÄíÆ®¸¦ »ç¿ëÇÏ´Â Àå¸éÀ¸·Î Çϰí ÀÖ¾îÄ¡¹ÙÀÀ ÀÚÁÖ ÀÖ´Â °ÍÀÌ, PHP ÀÇ º¯¼öÀÇ °ªÀ» SQL ÀÇ ½ÄÀ̳ª ¹®Áß¿¡¼­ »ç¿ëÇÏ´Â °ÍÀÔ´Ï´Ù. quoteInto() ¸Þ¼Òµå¸¦ »ç¿ëÇϸé, ÀÌ Ã³¸®¸¦ ÇÑ ¹ø¿¡ ÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù. ÀÌ ¸Þ¼Òµå°¡ ¹Þ´Â Àμö´Â µÑÀÔ´Ï´Ù. ¿ì¼± ÃÖÃÊÀÇ Àμö·Î¼­ Ç÷¹À̽ºÈ¦´õ ±âÈ£ (?) (À»)¸¦ Æ÷ÇÔÇÑ ¹®ÀÚ¿­À» ÁöÁ¤ÇØ, ´ÙÀ½ÀÇ Àμö·Î PHP ÀÇ º¯¼öµîÀÇ °ªÀ» ÁöÁ¤ÇÕ´Ï´Ù. ¿©±â¼­ ÁöÁ¤ÇÑ °ªÀ¸·Î, Ç÷¹À̽ºÈ¦´õÀÇ ºÎºÐÀ» ¿Å°Ü³õ½À´Ï´Ù.

Ç÷¹À̽ºÈ¦´õ¿ëÀÇ ±âÈ£´Â, ¸¹Àº RDBMS ±×¸®°í ÆÄ¶ó¹ÌÅͷμ­ »ç¿ëÇϰí ÀÖ´Â ±âÈ£¿Í °°½À´Ï´Ù.±×·¯³ª, quoteInto() ¸Þ¼Òµå´Â ¾îµð±îÁö³ª ÆÄ¶ó¹ÌÅ͸¦¿¡¹Â·¹ÀÌÆ® Çϰí ÀÖÀ» »ÓÀÔ´Ï´Ù. ÀÌ ¸Þ¼Òµå´Â ´Ü¼øÇÏ°Ô ¹®ÀÚ¿­¾È¿¡ °ªÀ» ´øÁ®, Ư¼ö ¹®ÀÚ¸¦ À̽ºÄÉÀÌÇÁ ÇØ ¾ç´ÜÀ» ÄíÆ® ÇÑ´Ù°í Çϴ ó¸®¸¸À» ½Ç½ÃÇÕ´Ï´Ù. RDBMS ¿¡ À־ÀÇ ÆÄ¶ó¹ÌÅÍ¿Í °°ÀÌ, SQL ¹®ÀÚ¿­°ú °ªÀ» ºÐ¸®ÇØ SQL ¸¸À» »çÀü¿¡ RDBMS ¼­¹ö·Î ÆÛ½º ÇÑ´Ù°í ÇÑ °ÍÀº ½Ç½ÃÇÏÁö ¾Ê½À´Ï´Ù.

·Ê 10.26. quoteInto() ÀÇ »ç¿ë¹ý


<?php
$sql 
$db->quoteInto("SELECT * FROM bugs WHERE reported_by = ?""O'Reilly");

echo 
$sql;
// SELECT * FROM bugs WHERE reported_by = 'O'Reilly'

quoteInto() ÀÇ ¿É¼ÇÀÇ 3 ¹øÂ°ÀÇ ÆÄ¶ó¹ÌÅ͸¦ »ç¿ëÇϸé,SQL ÀÇ µ¥ÀÌÅÍÇüÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¼öÄ¡ÇüÀº ÄíÆ®¸¦ ÇÏÁö ¾Ê°í, ±× ÀÌ¿ÜÀÇ ÇüÅ¿¡ ´ëÇØ¼­´Â ÄíÆ®¸¦ ½Ç½ÃÇÕ´Ï´Ù.

·Ê 10.27. quoteInto() (À¸)·ÎÀÇ SQL µ¥ÀÌÅÍÇüÀÇ ÁöÁ¤


<?php
$sql 
$db->quoteInto("SELECT * FROM bugs WHERE bug_id = ?"'1234''INTEGER');

echo 
$sql;
// SELECT * FROM bugs WHERE reported_by = 1234

10.1.5.3. quoteIdentifier() ÀÇ »ç¿ë¹ý

º¯¼ö¸¦ »ç¿ëÇÒ °¡´É¼ºÀÌ ÀÖ´Â °ÍÀº,SQL ¹®ÁßÀÇ °ª¸¸À̶ó°í´Â ÇÒ ¼ö ¾ø½À´Ï´Ù. SQL ¹®Áß¿¡¼­ÀÇ Å×À̺í¸íÀ̳ª Ä÷³¸íµîÀÇ ½Äº°Àڷμ­ PHP ÀÇ º¯¼ö¸¦ »ç¿ëÇÏ´Â °æ¿ìµµ, ¶È°°ÀÌ ÄíÆ® ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. µðÆúÆ®¿¡¼­´Â,SQL ÀÇ ½Äº°ÀÚ¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Â ¹®ÀÚ´Â PHP µîÀÇ ÇÁ·Î±×·¥ ¾ð¾îÀÇ ±ÔÄ¢°ú ´à¾Æ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, ½Äº°ÀÚ¿¡´Â °ø¹é ¹®ÀÚ³ª ±âÈ£¸¦ »ç¿ëÇÒ ¼ö ¾ø°í, ¶Ç ¾ËÆÄºª ÀÌ¿ÜÀÇ ¹®ÀÚµµ »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. SQL ÀÇ ¹®¹ý»ó Ưº°ÇÑ Àǹ̸¦ °¡Áö´Â ´Ü¾î·Î¼­ ¿¹¾àµÇ°í ÀÖ´Â °Íµµ, ±×´ë·Î´Â ½Äº°Àڷμ­ »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù.

±×·¯³ª, ÀûÀýÇÑ ´Ü¶ô ¹®ÀÚ·Î ÄíÆ® Çϸé, ½Äº°Àڷμ­ »ç¿ëÇÒ ¼ö ÀÖ´Â ¹®ÀÚÀÇ ÆøÀÌ ³Ð¾îÁý´Ï´Ù. º»·¡ ½Äº°Àڷμ­ »ç¿ëÇÒ ¼ö ¾ø´Â ¹®ÀÚ¸¦ Æ÷ÇÔÇϰí À־, ÀûÀýÇÑ Çü½Ä¿¡¼­ ÄíÆ® ÇÏ´Â °ÍÀ¸·Î SQL ÀÇ ½Äº°Àڷμ­ »ç¿ëÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù. ¿¹¸¦ µé¾î, °ø¹éÀ̳ª ±âÈ£µîÀ» »ç¿ëÇÒ ¼öµµ ÀÖ°í, SQL ±×¸®°í ¿¹¾à¾î(reserved word)·Î¼­ ÁöÁ¤µÇ¾î ÀÖ´Â ´Ü¾î¿©µµ »ç¿ë °¡´ÉÇÕ´Ï´Ù.

quoteIdentifier() ¸Þ¼ÒµåÀÇ ±â´ÉÀº quote() (¿Í)°ú ´à¾Æ ÀÖ½À´Ï´Ù¸¸, ÀÌ ¸Þ¼Òµå´Â »ç¿ëÇϰí ÀÖ´Â ¾î´ðÅÍÀÇ ÇüÅ¿¡ ÀÀÇÑ ½Äº°ÀÚ ´Ü¶ô ¹®ÀÚ¸¦ ºÎ°¡ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, Ç¥ÁØ SQL ±×·³ ´Ùºê¸£Å©Æ® (") (À»)¸¦ ´Ü¶ô ¹®Àڷμ­ »ç¿ëÇÕ´Ï´Ù. ¸¹Àº RDBMS ÇÏÁö¸¸ À̰Ϳ¡ µû¶ó¼­ ÀÖ½À´Ï´Ù. MySQL ÀÇ °æ¿ì´Â, µðÆúÆ®¿¡¼­´Â ¹ÚũũƮ (`) (À»)¸¦ »ç¿ëÇÕ´Ï´Ù. quoteIdentifier() ¸Þ¼Òµå´Â ¶Ç, ¹®ÀÚ¿­ Àμö³»ÀÇ Æ¯¼ö ¹®ÀÚÀÇ À̽ºÄÉÀÌÇÁµµ ½Ç½ÃÇÕ´Ï´Ù.

·Ê 10.28. quoteIdentifier() ÀÇ »ç¿ë¹ý


<?php
// Å×À̺í¸í¿¡,SQL ÀÇ ¿¹¾à¾î(reserved word)¸¦ »ç¿ëÇÕ´Ï´Ù
$tableName $db->quoteIdentifier("order");

$sql "SELECT * FROM $tableName";

echo 
$sql
// SELECT * FROM "order"

ÄíÆ® Çϰí ÀÖÁö ¾Ê´Â °æ¿ì¿Í´Â ´Þ¶ó, ÄíÆ® ÇÑ ½Äº°ÀÚ´Â ´ë¹®ÀÚ ¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏ°Ô µË´Ï´Ù. µû¶ó¼­, ÄíÆ® ÇÑ ½Äº°ÀÚ¸¦ »ç¿ëÇÏ´Â °æ¿ì´Â ´ë¹®ÀÚ ¼Ò¹®ÀÚÀÇ ÁöÁ¤µµ Æ÷ÇÔÇØ ½Äº°ÀÚ¸¦ Á¦´ë·Î ±â¼úÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.

´ëºÎºÐÀÇ °æ¿ì´Â Zend_Db Ŭ·¡½º¿¡¼­ ÀÚµ¿ÀûÀ¸·Î SQL (À»)¸¦ »ý¼ºÇÏ°Ô µÇ°ÚÁö¿ä.µðÆúÆ®¿¡¼­´Â, ¸ðµç ½Äº°ÀÚ°¡ ÀÚµ¿ÀûÀ¸·Î ÄíÆ® µË´Ï´Ù. ÀÌ °Åµ¿À» º¯°æÇÏ·Á¸é , ¿É¼Ç Zend_Db::AUTO_QUOTE_IDENTIFIERS (À»)¸¦ º¯°æÇÕ´Ï´Ù.À̰ÍÀº, ¾î´ðÅÍÀÇ ÀνºÅϽº¸¦ ÀÛ¼ºÇÒ ¶§·Î ÁöÁ¤ÇÕ´Ï´Ù. ·Ê10.6. ¡¸ÆÑÅ丮·ÎÀÇ ÀÚµ¿ ÄíÆ®¿ÀÇÁ¼ÇÀÇ ÁöÁ¤¡¹ (À»)¸¦ ÂüÁ¶ÇØ ÁֽʽÿÀ.

10.1.6. µ¥ÀÌŸº£À̽ºÀÇ Æ®·£Àè¼Ç(transaction)ÀÇ Á¦¾î

µ¥ÀÌŸº£À̽º¿¡´Â ¡¸Æ®·£Àè¼Ç(transaction)¡¹¶ó°í ºÒ¸®´Â ³í¸®ÀûÀÎ ÀÛ¾÷ ´ÜÀ§°¡ ÀÖ½À´Ï´Ù. º¹¼öÀÇ Å×ÀÌºí¿¡ °ÉÄ¡´Â Á¶ÀÛµîÀ» ÀϰýÇØ °»½Å (À§Å¹) Çϰųª ÀϰýÇØ Ãë¼Ò (·Ñ¹é(rollback)) Çϰųª ÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù. µ¥ÀÌŸº£À̽º µå¶óÀ̹ö°¡ Æ®·£Àè¼Ç(transaction)¸¦ ¾Ï¹¬ÀûÀ¸·Î ¼­Æ÷Æ®Çϰí ÀÖ´Â °æ¿ì´Â, ¸ðµç Äõ¸®°¡ Æ®·£Àè¼Ç(transaction)³»¿¡¼­ ½ÇÇàµË´Ï´Ù. À̰ÍÀ»ÀÚµ¿ À§Å¹¸ðµå¶ó°í ÇÕ´Ï´Ù. ÀÌ ¸ðµå¿¡¼­´Â, ¸ðµç Äõ¸®¸¦ ½ÇÇàÇϱâ Àü¿¡ µå¶óÀ̹ö°¡ ÀÚµ¿ÀûÀ¸·Î Æ®·£Àè¼Ç(transaction)¸¦ °³½ÃÇØ, ½ÇÇàÀÌ ¿Ï·áÇϸé ÀÚµ¿ÀûÀ¸·Î Æ®·£Àè¼Ç(transaction)¸¦ À§Å¹ÇÕ´Ï´Ù. µðÆúÆ®¿¡¼­´Â, ¸ðµç Zend_Db ¾î´ðÅÍ Å¬·¡½º´Â ÀÚµ¿ À§Å¹ ¸ðµå·Î µ¿ÀÛ sh.

ÇÑÆí, Æ®·£Àè¼Ç(transaction)ÀÇ ½ÃÁ¡°ú Á¾Á¡À» ½º½º·Î ÁöÁ¤ÇÏ´Â °ÍÀ¸·Î½á, º¹¼öÀÇ SQL Äõ¸®¸¦ ÇϳªÀÇ Æ®·£Àè¼Ç(transaction)³»¿¡¼­ ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. Æ®·£Àè¼Ç(transaction)¸¦ °³½ÃÇÒ ¶§ beginTransaction() ¸Þ¼Òµå¸¦ »ç¿ëÇÕ´Ï´Ù.±× ÀÌÈÄ¿¡ ½ÇÇàÇß´Ù SQL ¹®ÀåÀº, ¸í½ÃÀûÀ¸·Î ÁöÁ¤ÇÒ ¶§±îÁö´Â ¸ðµÎ °°Àº Æ®·£Àè¼Ç(transaction)³»¿¡¼­ µ¿ÀÛÇÕ´Ï´Ù.

Æ®·£Àè¼Ç(transaction)¸¦ Á¾·áÇÏ·Á¸é ,commit() ȤÀº rollBack() ÀÇ ¾î´ÀÂÊÀ̵çÀ» »ç¿ëÇÕ´Ï´Ù. commit() ¸Þ¼Òµå´Â, ±× Æ®·£Àè¼Ç(transaction)·ÎÀÇ º¯°æ ³»¿ëÀ» À§Å¹ÇÕ´Ï´Ù. Áï, ±× Æ®·£Àè¼Ç(transaction)·Î °£ º¯°æÀÌ, ´Ù¸¥ Æ®·£Àè¼Ç(transaction)·ÎºÎÅ͵µ º¸À̵µ·Ï(µíÀÌ) ÇÏ´Â °ÍÀÔ´Ï´Ù.

rollBack() ¸Þ¼Òµå´Â ±× ¹Ý´ëÀÇ µ¿ÀÛÀ» ÇÕ´Ï´Ù. ÀÌ ¸Þ¼Òµå´Â, ±× Æ®·£Àè¼Ç(transaction)·ÎÀÇ º¯°æ ³»¿ëÀ» ¸ðµÎ ÆÄ±âÇÕ´Ï´Ù. º¯°æÀº ÀÏÀý ¾ø¾ú´ø °ÍÀ¸·Î µÇ°í, Æ®·£Àè¼Ç(transaction)¸¦ °³½ÃÇϱâ Àü »óÅ¿¡ µ¥ÀÌÅ͸¦ µÇµ¹¸³´Ï´Ù. ±×·¯³ª, ¾î´À Æ®·£Àè¼Ç(transaction)¸¦ ·Ñ¹é(rollback) Çß´Ù°í ÇØµµ, ±× »çÀÌ¿¡ ´Ù¸¥ Æ®·£Àè¼Ç(transaction)·Î °£ º¯°æ¿¡´Â ¾î¶² ¿µÇâµµ ÁÖÁö ¾Ê½À´Ï´Ù.

Æ®·£Àè¼Ç(transaction)¸¦ Á¾·áÇϸé,Zend_Db_Adapter (Àº)´Â ´Ù½Ã ÀÚµ¿ À§Å¹ ¸ðµå·Î µ¹¾Æ¿É´Ï´Ù. ¼öµ¿À¸·ÎÀÇ Æ®·£Àè¼Ç(transaction) °ü¸®¸¦ »ç¿ëÇÏ°í ½ÍÀº °æ¿ì´Â, beginTransaction() (À»)¸¦ Çѹø ´õ ÄÝ ÇÕ´Ï´Ù.

·Ê 10.29. Àϰü¼ºÀ» º¸°ü À¯ÁöÇϱâ À§ÇÑ Æ®·£Àè¼Ç(transaction) °ü¸®


<?php
// Æ®·£Àè¼Ç(transaction)¸¦ ¸í½ÃÀûÀ¸·Î °³½ÃÇÕ´Ï´Ù
$db->beginTransaction();

try {
    
// ¸î°³Àΰ¡ Äõ¸®¸¦ ½ÇÇàÇÕ´Ï´Ù
    
$db->query(...);
    
$db->query(...);
    
$db->query(...);

    
// ¸ðµÎ ¼º°øÇϸé, Æ®·£Àè¼Ç(transaction)¸¦ À§Å¹ÇØ
    // ¸ðµç º¯°æÀ» ÇÑ ¹ø¿¡ Àû¿ëÇÕ´Ï´Ù
    
$db->commit();

} catch (
Exception $e) {
    
// ¸î°³ÀÇ Äõ¸®°¡ ½ÇÆÐÇØ ¿¹¿Ü°¡ ¹ß»ýÇϸé,
    // ¸¸¾à ±× ¹Û¿¡ ¼º°øÇϰí ÀÖ´Â Äõ¸®°¡ ÀÖ¾ú´Ù°í ÇØµµ
    // ±×°Íµµ Æ÷ÇÔÇØ ¸ðµç 󸮸¦ ·Ñ¹é(rollback) ÇÕ´Ï´Ù.
    // ¸ðµÎ Àû¿ëµÇ´ÂÁö, Çϳªµµ Àû¿ëµÇÁö ¾Ê´Â°¡ÀÇ ¸ÓÁö¾Ê¾ÆÀΰ¡ÀÔ´Ï´Ù.
    
$db->rollBack();
    echo 
$e->getMessage();
}

10.1.7. Å×À̺íÀÇ Á¤º¸ÀÇ Ãëµæ

listTables() ¸Þ¼Òµå´Â ¹®ÀÚ¿­ÀÇ ¹è¿­À» µ¹·ÁÁÝ´Ï´Ù. ÀÌ ¹è¿­¿¡´Â, µ¥ÀÌŸº£À̽º³»ÀÇ ¸ðµç Å×À̺íÀÇ À̸§ÀÌ °Ý³³µÇ°í ÀÖ½À´Ï´Ù.

describeTable() ¸Þ¼Òµå´Â, Å×À̺íÀÇ ¸ÞŸµ¥ÀÌŸ¸¦ °Ý³³ÇÑ ¿¬»ó ¹è¿­À» µ¹·ÁÁÝ´Ï´Ù. ÀÌ ¸Þ¼ÒµåÀÇ ÃÖÃÊÀÇ Àμö¿¡, Å×À̺í¸íÀ» ¹®ÀÚ¿­·Î ÁöÁ¤ÇÕ´Ï´Ù. µÎ¹øÂ°ÀÇ Àμö´Â ¿É¼ÇÀ¸·Î, ±× Å×À̺íÀÌ Á¸ÀçÇÏ´Â schemaÀÇ À̸§À» ÁöÁ¤ÇÕ´Ï´Ù. exists.

¿¬»ó ¹è¿­ÀÇ Å°´Â, Å×À̺íÀÇ Ä÷³ÀÇ À̸§ÀÌ µÇ¾î m. °¢ Ű¿¡ °ü·ÃÁöÀ» ¼ö ÀÖ¾ú´ø °ªµµ ¿¬»ó ¹è¿­·Î, ÀÌÇÏÀÇ Å°°¡ Á¸ÀçÇÕ´Ï´Ù.

Ç¥ 10.1. describeTable() ÇÏÁö¸¸ µ¹·ÁÁÖ´Â ¿¬»ó ¹è¿­ÀÇ Çʵå

Ű Çü ¼³¸í
SCHEMA_NAME (string) ÀÌ Å×À̺íÀÌ ¼ÓÇÏ´Â µ¥ÀÌŸº£À̽º schemaÀÇ À̸§.
TABLE_NAME (string) ÀÌ Ä÷³ÀÌ ¼ÓÇÏ´Â Å×À̺íÀÇ À̸§.
COLUMN_NAME (string) Ä÷³¸í.
COLUMN_POSITION (integer) Å×ÀÌºí³»¿¡¼­ÀÇ ±× Ä÷³ÀÇ À§Ä¡.
DATA_TYPE (string) RDBMS ±×¸®°í Á¤Àǵǰí ÀÖ´Â, ±× Ä÷³ÀÇ µ¥ÀÌÅÍÇü.
DEFAULT (string) ¸¸¾à Á¸ÀçÇϸé, ±× Ä÷³ÀÇ µðÆúƮġ.
NULLABLE (boolean) ±× Ä÷³ÀÌ SQL ÀÇ NULL (À»)¸¦ Çã°¡Çϰí ÀÖ´Â °æ¿ì´Â true,NOT NULL Á¦¾àÀÌ ÁöÁ¤µÇ¾î ÀÖ´Â °æ¿ì´Â false.
LENGTH (integer) RDBMS ±×¸®°í Á¤Àǵǰí ÀÖ´Â, ±× Ä÷³ÀÇ ±æÀÌ (»çÀÌÁî).
SCALE (integer) SQL ÀÇ NUMERIC ÇüÅ ȤÀº DECIMAL ÇüÅ·ÎÀÇ ÀÚ¸®¼ö.
PRECISION (integer) SQL ÀÇ NUMERIC ÇüÅ ȤÀº DECIMAL ÇüÅ·ÎÀÇ Á¤µµ.
UNSIGNED (boolean) Á¤¼ö°èÀÇ ÇüÅ·Î, ºÎÈ£ ¾øÀ½ (UNSIGNED) ÀÎ °æ¿ì¿¡ true.
PRIMARY (boolean) ±× Ä÷³ÀÌ ÁÖŰÀÇ ÀϺÎÀÎ °æ¿ì¿¡ true.
PRIMARY_POSITION (integer) ÁÖŰ Ä÷³ Áß(¾È)¿¡¼­ÀÇ ¼ø¼­ (óÀ½Àº 1).
IDENTITY (boolean) ±× Ä÷³ÀÌ ÀÚµ¿ »ý¼ºÀÇ °ªÀ» »ç¿ëÇϰí ÀÖ´Â °æ¿ì¿¡ true.

ÁöÁ¤ÇÑ Å×À̺í¸í°ú schema¸í¿¡ ´ëÀÀÇÏ´Â Å×À̺íÀÌ Á¸ÀçÇÏÁö ¾Ê´Â °æ¿ì´Â, describeTable() (Àº)´Â ÇÏ´ÃÀÇ ¹è¿­À» µ¹·ÁÁÝ´Ï´Ù.

10.1.8. Á¢¼ÓÀÇ Á¾·á

Åë»óÀº, µ¥ÀÌŸº£À̽º¿ÍÀÇ Á¢¼ÓÀ» ´ÝÀ» ÇÊ¿ä´Â ¾ø½À´Ï´Ù. ¸®Äù½ºÆ®ÀÇ Ã³¸®°¡ Á¾·áÇÑ ½ÃÁ¡¿¡¼­,PHP ÇÏÁö¸¸ ÀÚµ¿ÀûÀ¸·Î ÀÚ¿øÀÇ µÚ󸮸¦ ½Ç½ÃÇϱ⠶§¹®ÀÔ´Ï´Ù. µ¥ÀÌŸº£À̽º °ü·ÃÀÇ È®Àå ¸ðµâÀº, ÀÚ¿ø ¿ÀºêÁ§Æ®¿¡ÀÇ ÂüÁ¶°¡ ¾ø¾îÁø ½ÃÁ¡¿¡¼­ Á¢¼ÓÀ» ´Ýµµ·Ï(µíÀÌ) ¼³°èµÇ°í ÀÖ½À´Ï´Ù.

±×·¯³ª, ½ÇÇà ½Ã°£ÀÌ ±æ°Ô °É·Á, ¸¹Àº µ¥ÀÌŸº£À̽º Á¢¼ÓÀ» Ãë±ÞÇÏ´Â PHP ½ºÅ©¸³Æ®ÀÇ °æ¿ì´Â, ½º½º·Î Á¢¼ÓÀ» ´ÝÀ» Çʿ䰡 ÀÖÀ»Áöµµ ¸ð¸¨´Ï´Ù. À̰Ϳ¡ ÀÇÇØ,RDBMS ¼­¹ö°¡ ÇѰ迡 À̸£·¯ ¹ö¸®´Â °ÍÀ» ¸·½À´Ï´Ù. µ¥ÀÌŸº£À̽º Á¢¼ÓÀ» ¸í½ÃÀûÀ¸·Î ´ÝÀ¸·Á¸é , ¾î´ðÅÍÀÇ closeConnection() ¸Þ¼Òµå¸¦ »ç¿ëÇÕ´Ï´Ù.

·Ê 10.30. µ¥ÀÌŸº£À̽º¿ÍÀÇ Á¢¼ÓÀÇ ÇØÁ¦


<?php
$db
->closeConnection();

[ÁÖÀÇ] Zend_Db (Àº)´Â Áö¼ÓÀûÀÎ Á¢¼ÓÀ» ¼­Æ÷Æ®Çϰí ÀÖ½À´Ï±î?

Zend_Db ±×·³, Áö¼ÓÀûÀÎ Á¢¼ÓÀÇ »ç¿ëÀº ¼­Æ÷Æ®Çϰí ÀÖÁö ¾Ê½À´Ï´Ù.

Áö¼ÓÀûÀÎ Á¢¼ÓÀ» »ç¿ëÇϸé,RDBMS ¼­¹ö¿¡ ºÒÇÊ¿äÇÑ Á¢¼ÓÀÌ ½×¿© ¹ö¸³´Ï´Ù. Á¢¼Ó ÀÛ¼º½ÃÀÇ ¿À¹öÇìµå°¡ ÁÙ¾î µå´Â °Í¿¡ ÀÇÇÑ ÆÛÆ÷¸Õ½ºÀÇ Çâ»óº¸´Ù, °Å±â¿¡ µû¶ó ÀÏÀ¸ÄÑÁö´Â ¹®Á¦ ÂÊÀÌ ¸¹¾ÆÁú ¼ö ÀÖ½À´Ï´Ù.

µ¥ÀÌŸº£À̽º Á¢¼ÓÀº, ±× »óŸ¦ °ü¸®Çϰí ÀÖ½À´Ï´Ù. Áï,RDBMS ¼­¹öÀÇ ¿ÀºêÁ§Æ®¾È¿¡´Â ¼¼¼Ç ½ºÄÚÇÁ·Î Á¸ÀçÇÏ´Â °ÍÀÌ ÀÖ´Â °ÍÀÔ´Ï´Ù. ¼¼¼Ç ½ºÄÚÇÁ·Î °ü¸®µÇ´Â Á¤º¸ÀÇ ¿¹·Î¼­´Â, ¶ôÀ̳ª À¯Àú º¯¼ö, ÀϽà Å×À̺í, ¹Ù·Î ¿·¿¡ ½ÇÇàÇÑ Äõ¸®ÀÇ Á¤º¸ (º¯°æµÈ Çà¼ö, ÀÚµ¿ »ý¼ºµÇ¾ú´Ù ID) µîÀ» µé ¼ö ÀÖ½À´Ï´Ù. Áö¼ÓÀûÀÎ Á¢¼ÓÀ» »ç¿ëÇϸé, ´Ù¸¥ PHP ¸®Äù½ºÆ®°¡ ÀÛ¼ºÇÑ µ¥ÀÌÅÍ¿¡ À߸øÇØ ¾×¼¼½º ÇØ ¹ö¸®´Â À§ÇèÀÌ »ý°Ü ¹ö¸³´Ï´Ù.

10.1.9. ±× ¿ÜÀÇ ½ºÅ×ÀÌÆ®¸ÕÆ®ÀÇ ½ÇÇà

PHP ÀÇ µ¥ÀÌŸº£À̽º °ü·Ã È®Àå ¸ðµâÀÌ Á¦°øÇÏ´Â Á¢¼Ó ¿ÀºêÁ§Æ®¸¦, Á÷Á¢ Á¶ÀÛÇÏ°í ½Í¾îÁö´Â ÀÏÀÌ ÀÖÀ»Áöµµ ¸ð¸¨´Ï´Ù. Zend_Db_Adapter_Abstract ÇÏÁö¸¸ ´ëÀÀÇϰí ÀÖÁö ¾Ê´Â µíÇÑ ±× µ¥ÀÌŸº£À̽º °íÀ¯ÀÇ ±â´ÉÀ» »ç¿ëÇÏ°í ½ÍÀº °æ¿ì µîÀÔ´Ï´Ù.

Zend_Db ±×¸®°í SQL ¹®ÀåÀ» ½ÇÇàÇÏ´Â °æ¿ì´Â, Ç×»ó ÇÁ¸®Æä¾Æ/½ÇÇàÀÇ 2´Ü°è·Î ³ª´©¾î 󸮵˴ϴÙ. ±×·¯³ª, µ¥ÀÌŸº£À̽ºÀÇ ±â´É¾È¿¡´Â ÇÁ¸®Æä¾Æµå½ºÅ×ÀÌÆ®¸ÕÆ®¿¡ ´ëÀÀÇϰí ÀÖÁö ¾Ê´Â µíÇÑ °Íµµ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î,CREATE (ÀÌ)³ª ALTER (¿Í)°ú °°Àº DDL (Àº)´Â, MySQL ±×·³ ÇÁ¸®Æä¾Æµå½ºÅ×ÀÌÆ®¸ÕÆ®·Î ÇÒ ¼ö ¾ø½À´Ï´Ù. ¶Ç,MySQL 5.1.17 º¸´Ù ÀüÀÇ ¹öÁ¯¿¡¼­´Â MySQL Äõ¸® ij½¬ ÀÇ ±â´ÉÀ» Ȱ¿ëÇÒ ¼ö ¾ø½À´Ï´Ù.

´ëºÎºÐÀÇ È®Àå ¸ðµâ¿¡´Â, ÇÁ¸®Æä¾Æµå½ºÅ×ÀÌÆ®¸ÕÆ®´Â ¾Æ´Ï°í Á÷Á¢ SQL (À»)¸¦ ½ÇÇàÇϱâ À§ÇÑ ¸Þ¼Òµå°¡ ÁغñµÇ¾î ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î PDO (ÀÌ)¶ó¸é exec() ÇÏÁö¸¸ °Å±â¿¡ ¸ÂÀ¾´Ï´Ù. Á¢¼Ó ¿ÀºêÁ§Æ®¿¡ Á÷Á¢ ¾×¼¼½º ÇÏ·Á¸é ,getConnection() (À»)¸¦ »ç¿ëÇÕ´Ï´Ù.

·Ê 10.31. PDO ¾î´ðÅÍ¿¡ ÀÇÇÑ, ÇÁ¸®Æä¾Æµå Çü½ÄÀÌ ¾Æ´Ñ Äõ¸®ÀÇ ½ÇÇà


<?php
$result 
$db->getConnection()->exec('DROP TABLE bugs');

ÀÌ¿Í °°ÀÌ Çϰí, È®Àå ¸ðµâÀÌ Á¦°øÇÏ´Â ±× ¿ÜÀÇ ¸Þ¼Òµå³ª ÇÁ·ÓÆÛƼ¿¡µµ ¾×¼¼½º ÇÒ ¼ö ÀÖ½À´Ï´Ù.´ÜÁö, ÁÖÀǰ¡ ÇÊ¿äÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ÀÏÀ» Çϸé, ´ç½ÅÀÇ ÀÛ¼ºÇÑ ¾îÇø®ÄÉÀ̼ÇÀÌ Æ¯Á¤ÀÇ RDBMS ¿ë¹«ÀÇ È®Àå ¸ðµâ¿¡ ÀÇÁ¸ÇØ ¹ö¸®°Ô µË´Ï´Ù.

Àå·¡ÀÇ ¹öÁ¯ÀÇ Zend_Db ±×·³, µ¥ÀÌŸº£À̽ºÀÇ È®Àå ¸ðµâÀÌ ¼­Æ÷Æ®ÇÏ´Â ±â´É¿¡ÀÇ ¸Þ¼Òµå ¿£Æ®¸® Æ÷ÀÎÆ®¸¦ Ãß°¡ÇÒ ¼ö ÀÖµµ·Ï ÇÒ ¿¹Á¤ÀÔ´Ï´Ù. À̰ÍÀº, °ú°ÅÀÇ ¹öÁ¯°úÀÇ È£È¯¼ºÀ» ÇØÄ¥ °ÍÀº ¾ø½À´Ï´Ù.

10.1.10. °¢ ¾î´ðÅÍ °íÀ¯ÀÇ ÁÖÀÇÁ¡

¿©±â¿¡¼­´Â, »ç¿ëÇÏ´Â ¾î´ðÅÍ ¸¶´Ù ÁÖÀÇÇØ¾ß ÇÒ Á¡À» Á¤¸®ÇÕ´Ï´Ù.

10.1.10.1. IBM DB2

  • ÀÌ ¾î´ðÅ͸¦ factory() ±×¸®°í ÁöÁ¤ÇÏ´Â °æ¿ì´Â, À̸§À» 'Db2' (À¸)·Î ÇÕ´Ï´Ù.

  • ÀÌ ¾î´ðÅÍ´Â,PHP ÀÇ ibm_db2 È®Àå ¸ðµâÀ» »ç¿ëÇÕ´Ï´Ù.

  • IBM DB2 (Àº)´Â, ¼ø¼­µµ ÀÚµ¿ ÀÎÅ©¸®¸ÕÆ®(increment)ÀÇ Å°µµ ¾çÂÊ ¸ðµÎ ¼­Æ÷Æ®Çϰí ÀÖ½À´Ï´Ù. µû¶ó¼­,lastInsertId() ¿¡ÀÇ Àμö´Â ÁöÁ¤Çصµ ÇÏÁö ¾Ê¾Æµµ ±¦Âú½À´Ï´Ù.Àμö¸¦ »ý·« ÇßÀ» °æ¿ì´Â, ÀÚµ¿ ÀÎÅ©¸®¸ÕÆ®(increment)ÀÇ Å°°¡ ¸¶Áö¸·¿¡ »ý¼ºÇÑ °ªÀ» µ¹·ÁÁÝ´Ï´Ù. Àμö¸¦ ÁöÁ¤ÇßÀ» °æ¿ì´Â, 'Å×À̺í¸í_Ä÷³¸í_seq' (ÀÌ)¶ó´Â À̸§ÀÇ ¼ø¼­°¡ ¸¶Áö¸·¿¡ »ý¼ºÇÑ °ªÀ» µ¹·ÁÁÝ´Ï´Ù.

10.1.10.2. MySQLi

  • ÀÌ ¾î´ðÅ͸¦ factory() ±×¸®°í ÁöÁ¤ÇÏ´Â °æ¿ì´Â, À̸§À» 'Mysqli' (À¸)·Î ÇÕ´Ï´Ù.

  • ÀÌ ¾î´ðÅÍ´Â,PHP ÀÇ mysqli È®Àå ¸ðµâÀ» »ç¿ëÇÕ´Ï´Ù.

  • MySQL (Àº)´Â ¼ø¼­¸¦ ¼­Æ÷Æ®Çϰí ÀÖÁö ¾Ê½À´Ï´Ù.µû¶ó¼­, lastInsertId() ¿¡ Àμö¸¦ ÁöÁ¤Çصµ ±×°ÍÀº ¹«½ÃµË´Ï´Ù. µ¹¾Æ°¡ °ªÀº, Ç×»ó ÀÚµ¿ ÀÎÅ©¸®¸ÕÆ®(increment)ÀÇ Å°ÀÇ ¸¶Áö¸· °ªÀÌ µË´Ï´Ù. lastSequenceId() ¸Þ¼ÒµåÀÇ µ¹¾Æ°¡ °ªÀº null µË´Ï´Ù.

10.1.10.3. Oracle

  • ÀÌ ¾î´ðÅ͸¦ factory() ±×¸®°í ÁöÁ¤ÇÏ´Â °æ¿ì´Â, À̸§À» 'Oracle' (À¸)·Î ÇÕ´Ï´Ù.

  • ÀÌ ¾î´ðÅÍ´Â,PHP ÀÇ oci8 È®Àå ¸ðµâÀ» »ç¿ëÇÕ´Ï´Ù.

  • Oracle (Àº)´Â ÀÚµ¿ ÀÎÅ©¸®¸ÕÆ®(increment)ÀÇ Å°¸¦ ¼­Æ÷Æ®Çϰí ÀÖÁö ¾Ê½À´Ï´Ù. µû¶ó¼­,lastInsertId() (ÀÌ)³ª lastSequenceId() ¿¡´Â ¼ø¼­¸íÀ» ÁöÁ¤ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.

  • Oracle È®Àå ¸ðµâÀº À§Ä¡ ÁöÁ¤¿¡ ÀÇÇÑ ÆÄ¶ó¹ÌÅ͸¦ ¼­Æ÷Æ®Çϰí ÀÖÁö ¾Ê½À´Ï´Ù. À̸§ ´ÙÇØ ÆÄ¶ó¹ÌÅ͸¦ »ç¿ëÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.

  • ÇöÀç,Oracle ¾î´ðÅÍ¿¡¼­´Â Zend_Db::CASE_FOLDING ¿É¼ÇÀ» ¼­Æ÷Æ®Çϰí ÀÖÁö ¾Ê½À´Ï´Ù.Oracle ±×¸®°í ÀÌ ±â´ÉÀ» »ç¿ëÇÏ°í ½ÍÀº °æ¿ì´Â,PDO OCI ¾î´ðÅ͸¦ »ç¿ëÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.

10.1.10.4. PDO for IBM DB2 and Informix Dynamic Server (IDS)

  • ÀÌ ¾î´ðÅ͸¦ factory() ±×¸®°í ÁöÁ¤ÇÏ´Â °æ¿ì´Â, À̸§À» 'Pdo_Ibm' (À¸)·Î ÇÕ´Ï´Ù.

  • ÀÌ ¾î´ðÅÍ´Â,PHP ÀÇ pdo ¹× pdo_ibm È®Àå ¸ðµâÀ» »ç¿ëÇÕ´Ï´Ù.

  • PDO_IBM È®Àå ¸ðµâÀÇ ¹öÁ¯ 1.2.2 ÀÌÈİ¡ ÇÊ¿äÇÕ´Ï´Ù. À̰ͺ¸´Ù ³°Àº ¹öÁ¯À» »ç¿ëÇϰí ÀÖ´Â °æ¿ì´Â,PDO_IBM È®Àå ¸ðµâÀ» PECL ±×¸®°í °»½ÅÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.

10.1.10.5. PDO Microsoft SQL Server

  • ÀÌ ¾î´ðÅ͸¦ factory() ±×¸®°í ÁöÁ¤ÇÏ´Â °æ¿ì´Â, À̸§À» 'Pdo_Mssql' (À¸)·Î ÇÕ´Ï´Ù.

  • ÀÌ ¾î´ðÅÍ´Â,PHP ÀÇ pdo ¹× pdo_mssql È®Àå ¸ðµâÀ» »ç¿ëÇÕ´Ï´Ù.

  • Microsoft SQL Server (Àº)´Â ¼ø¼­¸¦ ¼­Æ÷Æ®Çϰí ÀÖÁö ¾Ê½À´Ï´Ù. µû¶ó¼­, lastInsertId() ¿¡ Àμö¸¦ ÁöÁ¤Çصµ ±×°ÍÀº ¹«½ÃµË´Ï´Ù. µ¹¾Æ°¡ °ªÀº, Ç×»ó ÀÚµ¿ ÀÎÅ©¸®¸ÕÆ®(increment)ÀÇ Å°ÀÇ ¸¶Áö¸· °ªÀÌ µË´Ï´Ù. lastSequenceId() ¸Þ¼ÒµåÀÇ µ¹¾Æ°¡ °ªÀº null µË´Ï´Ù.

  • Zend_Db_Adapter_Pdo_Mssql (Àº)´Â,SQL Server ¿¡ Á¢¼ÓÇÑ Á÷ÈÄ¿¡ QUOTED_IDENTIFIER ON (À»)¸¦ ¼³Á¤ÇÕ´Ï´Ù.À̰Ϳ¡ ÀÇÇØ,SQL ÀÇ ½Äº°ÀÚ¸¦ ÄíÆ® ÇÒ ¶§¿¡ Ç¥ÁØÀÇ ´Ü¶ô ¹®ÀÚ (") (À»)¸¦ »ç¿ëÇÏ°Ô µË´Ï´Ù. SQL Server ÀÇ µ¶ÀÚ »ç¾çÀÎ ²©¼â¹­À½¿¡ ÀÇÇÑ ÄíÆ®´Â »ç¿ëÇÏÁö ¾Ê½À´Ï´Ù.

  • ¿É¼ÇÀÇ ¹è¿­·Î, Ű·Î¼­ pdoType (À»)¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.ÀÌ °ªÀº "mssql" (µðÆúÆ®), "dblib","freetds" ȤÀº "sybase" ÀÇ ¾ðÁ¨°¡µË´Ï´Ù. ÀÌ ¿É¼ÇÀº,DSN ¹®ÀÚ¿­À» ÀÛ¼ºÇÒ ¶§¿¡ »ç¿ëÇÑ´Ù DSN ÇÁ·¹ÇȽº¿¡ ¿µÇâÀ» ÁÝ´Ï´Ù."freetds" ¹× "sybase" (À»)¸¦ ÁöÁ¤ÇßÀ» °æ¿ìÀÇ ÇÁ·¹ÇȽº´Â "sybase:" µË´Ï´Ù.À̰ÍÀº FreeTDS °èÀÇ ¶óÀ̺귯¸®¿¡¼­ ÀÌ¿ëµÇ´Â °ÍÀÔ´Ï´Ù. ÀÌ µå¶óÀ̹ö·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù DSN ÇÁ·¹ÇȽºÀÇ ÀÚ¼¼ÇÑ °ÍÀº http://www.php.net/manual/ja/ref.pdo-dblib.connection.php (À»)¸¦ ÂüÁ¶ÇØ ÁֽʽÿÀ.

10.1.10.6. PDO MySQL

  • ÀÌ ¾î´ðÅ͸¦ factory() ±×¸®°í ÁöÁ¤ÇÏ´Â °æ¿ì´Â, À̸§À» 'Pdo_Mysql' (À¸)·Î ÇÕ´Ï´Ù.

  • ÀÌ ¾î´ðÅÍ´Â,PHP ÀÇ pdo ¹× pdo_mysql È®Àå ¸ðµâÀ» »ç¿ëÇÕ´Ï´Ù.

  • MySQL (Àº)´Â ¼ø¼­¸¦ ¼­Æ÷Æ®Çϰí ÀÖÁö ¾Ê½À´Ï´Ù.µû¶ó¼­, lastInsertId() ¿¡ Àμö¸¦ ÁöÁ¤Çصµ ±×°ÍÀº ¹«½ÃµË´Ï´Ù. µ¹¾Æ°¡ °ªÀº, Ç×»ó ÀÚµ¿ ÀÎÅ©¸®¸ÕÆ®(increment)ÀÇ Å°ÀÇ ¸¶Áö¸· °ªÀÌ µË´Ï´Ù. lastSequenceId() ¸Þ¼ÒµåÀÇ µ¹¾Æ°¡ °ªÀº null µË´Ï´Ù.

10.1.10.7. PDO Oracle

  • ÀÌ ¾î´ðÅ͸¦ factory() ±×¸®°í ÁöÁ¤ÇÏ´Â °æ¿ì´Â, À̸§À» 'Pdo_Oci' (À¸)·Î ÇÕ´Ï´Ù.

  • ÀÌ ¾î´ðÅÍ´Â,PHP ÀÇ pdo ¹× pdo_oci È®Àå ¸ðµâÀ» »ç¿ëÇÕ´Ï´Ù.

  • Oracle (Àº)´Â ÀÚµ¿ ÀÎÅ©¸®¸ÕÆ®(increment)ÀÇ Å°¸¦ ¼­Æ÷Æ®Çϰí ÀÖÁö ¾Ê½À´Ï´Ù. µû¶ó¼­,lastInsertId() (ÀÌ)³ª lastSequenceId() ¿¡´Â ¼ø¼­¸íÀ» ÁöÁ¤ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.

10.1.10.8. PDO PostgreSQL

  • ÀÌ ¾î´ðÅ͸¦ factory() ±×¸®°í ÁöÁ¤ÇÏ´Â °æ¿ì´Â, À̸§À» 'Pdo_Pgsql' (À¸)·Î ÇÕ´Ï´Ù.

  • ÀÌ ¾î´ðÅÍ´Â,PHP ÀÇ pdo ¹× pdo_pgsql È®Àå ¸ðµâÀ» »ç¿ëÇÕ´Ï´Ù.

  • PostgreSQL (Àº)´Â, ¼ø¼­µµ ÀÚµ¿ ÀÎÅ©¸®¸ÕÆ®(increment)ÀÇ Å°µµ ¾çÂÊ ¸ðµÎ ¼­Æ÷Æ®Çϰí ÀÖ½À´Ï´Ù. µû¶ó¼­,lastInsertId() ¿¡ÀÇ Àμö´Â ÁöÁ¤Çصµ ÇÏÁö ¾Ê¾Æµµ ±¦Âú½À´Ï´Ù.Àμö¸¦ »ý·« ÇßÀ» °æ¿ì´Â, ÀÚµ¿ ÀÎÅ©¸®¸ÕÆ®(increment)ÀÇ Å°°¡ ¸¶Áö¸·¿¡ »ý¼ºÇÑ °ªÀ» µ¹·ÁÁÝ´Ï´Ù. Àμö¸¦ ÁöÁ¤ÇßÀ» °æ¿ì´Â, 'Å×À̺í¸í_Ä÷³¸í_seq' (ÀÌ)¶ó´Â À̸§ÀÇ ¼ø¼­°¡ ¸¶Áö¸·¿¡ »ý¼ºÇÑ °ªÀ» µ¹·ÁÁÝ´Ï´Ù.

10.1.10.9. PDO SQLite

  • ÀÌ ¾î´ðÅ͸¦ factory() ±×¸®°í ÁöÁ¤ÇÏ´Â °æ¿ì´Â, À̸§À» 'Pdo_Sqlite' (À¸)·Î ÇÕ´Ï´Ù.

  • ÀÌ ¾î´ðÅÍ´Â,PHP ÀÇ pdo ¹× pdo_sqlite È®Àå ¸ðµâÀ» »ç¿ëÇÕ´Ï´Ù.

  • SQLite (Àº)´Â ¼ø¼­¸¦ ¼­Æ÷Æ®Çϰí ÀÖÁö ¾Ê½À´Ï´Ù.µû¶ó¼­, lastInsertId() ¿¡ Àμö¸¦ ÁöÁ¤Çصµ ±×°ÍÀº ¹«½ÃµË´Ï´Ù. µ¹¾Æ°¡ °ªÀº, Ç×»ó ÀÚµ¿ ÀÎÅ©¸®¸ÕÆ®(increment)ÀÇ Å°ÀÇ ¸¶Áö¸· °ªÀÌ µË´Ï´Ù. lastSequenceId() ¸Þ¼ÒµåÀÇ µ¹¾Æ°¡ °ªÀº null µË´Ï´Ù.

  • SQLite2 µ¥ÀÌŸº£À̽º¿¡ Á¢¼ÓÇÏ·Á¸é , Pdo_Sqlite ¾î´ðÅÍÀÇ ÀνºÅϽº¸¦ ÀÛ¼ºÇÒ ¶§¿¡ ÆÄ¶ó¹ÌÅÍÀÇ ¹è¿­·Î 'dsnprefix'=>'sqlite2' (À»)¸¦ ÁöÁ¤ÇÕ´Ï´Ù.

  • ¸Þ¸ð¸®»óÀÇ SQLite µ¥ÀÌŸº£À̽º¿¡ Á¢¼ÓÇÏ·Á¸é , Pdo_Sqlite ¾î´ðÅÍÀÇ ÀνºÅϽº¸¦ ÀÛ¼ºÇÒ ¶§¿¡ ÆÄ¶ó¹ÌÅÍÀÇ ¹è¿­·Î 'dbname'=>':memory:' (À»)¸¦ ÁöÁ¤ÇÕ´Ï´Ù.

  • PHP ¿ë¹«ÀÇ SQLite µå¶óÀ̹öÀÇ ³°Àº ¹öÁ¯¿¡¼­´Â, °á°ú ¼¼Æ®·Î ªÀº Ä÷³¸íÀ» »ç¿ëÇϱâ À§ÇÑ PRAGMA Ä¿¸àµå°¡ ¼­Æ÷Æ®µÇ¾î ÀÖÁö ¾ÊÀº °Í °°½À´Ï´Ù. join Äõ¸®¸¦ ½ÇÇàÇßÀ» ¶§ÀÇ °á°ú ¼¼Æ®ÀÇ Ä÷³¸íÀÌ "Å×À̺í¸í.Ä÷³¸í" Çü½ÄÀÌ µÇ´Â °æ¿ì´Â, PHP ÀÇ ¹öÁ¯À» ¾÷±×·¹À̵å ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.

10.1.10.10. Firebird/Interbase

  • ÀÌ ¾î´ðÅ͸¦ factory() ±×¸®°í ÁöÁ¤ÇÏ´Â °æ¿ì´Â, À̸§À» 'Firebird' (À¸)·Î ÇÕ´Ï´Ù.

  • ÀÌ ¾î´ðÅÍ´Â,PHP ÀÇ php_interbase È®Àå ¸ðµâÀ» »ç¿ëÇÕ´Ï´Ù.

  • Firebird/interbase (Àº)´Â ÀÚµ¿ ÀÎÅ©¸®¸ÕÆ®(increment)ÀÇ Å°¸¦ ¼­Æ÷Æ®Çϰí ÀÖÁö ¾Ê½À´Ï´Ù. ¼ø¼­ÀÇ À̸§À» lastInsertId() ȤÀº lastSequenceId() (À¸)·Î ÁöÁ¤ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.

  • ÇöÀç,Firebird/interbase ¾î´ðÅÍ¿¡¼­´Â Zend_Db::CASE_FOLDING ¿É¼ÇÀ» ¼­Æ÷Æ®Çϰí ÀÖÁö ¾Ê½À´Ï´Ù. ÄíÆ® Çϰí ÀÖÁö ¾Ê´Â ½Äº°ÀÚ´Â, ÀÚµ¿ÀûÀ¸·Î ´ë¹®ÀÚ·Î µ¹·ÁÁÖ¾îÁý´Ï´Ù.