Ç×10.1. ¡¸Zend_Db_Adapter¡¹ ±×¸®°í ¼³¸íÇß´Ù
fetchAll()
(ÀÌ)³ª insert()
(¿Í)°ú °°ÀÌ Æí¸®ÇÑ ¸Þ¼Òµå À̿ܿ¡µµ,
½ºÅ×ÀÌÆ®¸ÕÆ® ¿ÀºêÁ§Æ®¸¦ »ç¿ëÇÏ´Â °ÍÀ¸·Î,
º¸´Ù À¯¿¬ÇÏ°Ô Äõ¸®ÀÇ ½ÇÈ¿³ª °á°úÀÇ ÃëµæÀ» ÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù.
¿©±â¿¡¼´Â, ½ºÅ×ÀÌÆ®¸ÕÆ® ¿ÀºêÁ§Æ®¸¦ ÃëµæÇØ ±× ¸Þ¼Òµå¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÕ´Ï´Ù.
Zend_Db_Statement (Àº)´Â, PHP Data Objects È®Àå ¸ðµâÀÇ PDOStatement ¿ÀºêÁ§Æ®¸¦ ±âÃÊ·Î ÇÑ °ÍÀÔ´Ï´Ù.
Åë»óÀº, ½ºÅ×ÀÌÆ®¸ÕÆ® ¿ÀºêÁ§Æ®´Â µ¥ÀÌŸº£À̽º ¾î´ðÅÍ Å¬·¡½ºÀÇ
query()
¸Þ¼ÒµåÀÇ µ¹¾Æ°¡ °ªÀ¸·Î ÇØ¼ ÃëµæÇÕ´Ï´Ù.
ÀÌ ¸Þ¼Òµå´Â, ÀÓÀÇÀÇ SQL ¹®ÀåÀ» ½ÇÇàÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÃÖÃÊÀÇ Àμö¿¡´Â SQL ¹®ÀåÀ» ÁöÁ¤ÇØ,
¿É¼ÇÀÇ µÎ¹øÂ°ÀÇ Àμö¿¡´Â SQL ¹®ÁßÀÇ Ç÷¹À̽ºÈ¦´õ¸¦ ¿Å°Ü³õ´Â´Ù
¹ÙÀÎµå º¯¼öÀÇ ¹è¿À» ÁöÁ¤ÇÕ´Ï´Ù.
·Ê 10.32. query() ¿¡ ÀÇÇÑ´Ù SQL ½ºÅ×ÀÌÆ®¸ÕÆ® ¿ÀºêÁ§Æ®ÀÇ ÀÛ¼º
<?php
$stmt = $db->query('SELECT * FROM bugs WHERE reported_by = ? AND bug_status = ?',
array('goofy', 'FIXED'));
½ºÅ×ÀÌÆ®¸ÕÆ® ¿ÀºêÁ§Æ®´Â, ÁغñµÇ¾ú´Ù SQL ¹®Àå¿¡ ´ëÇØ¼ º¯¼öÀÇ °ªÀ» ¹ÙÀεå ÇØ ÇÑ ¹ø ½ÇÇàÇÑ °Í¿¡ ´ëÀÀÇÕ´Ï´Ù. ±× ½ºÅ×ÀÌÆ®¸ÕÆ®°¡ SELECT Äõ¸® ȤÀº ¾î¶°ÇÑ °á°ú ¼¼Æ®¸¦ µ¹·ÁÁÖ´Â °ÍÀ̾úÀ» °æ¿ì´Â, ¹ú½á °á°ú¸¦ ÃëµæÇÒ Áغñ°¡ µÇ¾î ÀÖ½À´Ï´Ù.
½ºÅ×ÀÌÆ®¸ÕÆ® ¿ÀºêÁ§Æ®¸¦ constructor¡¡ ¡¡ À¸·ÎºÎÅÍ ÀÛ¼ºÇÒ ¼öµµ ÀÖ½À´Ï´Ù¸¸, º°·Î ÀϹÝÀûÀÌÁö´Â ¾Ê½À´Ï´Ù.ÀÌ ¿ÀºêÁ§Æ®¸¦ ÀÛ¼ºÇϱâ À§ÇÑ ÆÑÅ丮 ¸Þ¼Òµå´Â ¾ø±â ¶§¹®¿¡, ƯÁ¤ÀÇ ½ºÅ×ÀÌÆ®¸ÕÆ® Ŭ·¡½º¸¦ Àоîµé¿© ±× constructor¡¡ ¡¡ À» ÄÝ ÇÏ°Ô µË´Ï´Ù. constructor¡¡ ¡¡ ÀÇ ÃÖÃÊÀÇ Àμö¿¡´Â ¾î´ðÅÍ ¿ÀºêÁ§Æ®¸¦ ÁöÁ¤ÇØ, µÎ¹øÂ°ÀÇ Àμö¿¡´Â SQL ¹®ÀåÀ» ¹®ÀÚ¿·Î ÁöÁ¤ÇÕ´Ï´Ù. ÀÌ ½ºÅ×ÀÌÆ®¸ÕÆ®´Â, ÁغñµÈ °Í¸¸À¸·Î ¾ÆÁ÷ ½ÇÇàµÇ¾î ÀÖÁö ¾ÊÀº »óŰ¡ µË´Ï´Ù.
·Ê 10.33. SQL ½ºÅ×ÀÌÆ®¸ÕÆ®ÀÇ constructor¡¡ ¡¡ ÀÇ »ç¿ë
<?php
require_once 'Zend/Db/Statement/Mysqli.php';
$sql = 'SELECT * FROM bugs WHERE reported_by = ? AND bug_status = ?';
$stmt = new Zend_Db_Statement_Mysqli($db, $sql);
½ºÅ×ÀÌÆ®¸ÕÆ®¸¦ constructor¡¡ ¡¡ À¸·ÎºÎÅÍ ÀÛ¼ºÇßÀ» °æ¿ì³ª,
ÇÑ ¹ø ½ÇÇàÇÑ ½ºÅ×ÀÌÆ®¸ÕÆ®¸¦ Çѹø ´õ ½ÇÇàÇÏ°í ½ÍÀº °æ¿ì µîÀº,
½ºÅ×ÀÌÆ®¸ÕÆ® ¿ÀºêÁ§Æ®¸¦ ½º½º·Î ½ÇÇàÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.
±× °æ¿ì´Â, ½ºÅ×ÀÌÆ®¸ÕÆ® ¿ÀºêÁ§Æ®ÀÇ execute()
¸Þ¼Òµå¸¦ »ç¿ëÇÕ´Ï´Ù.ÀÌ ¸Þ¼Òµå¿¡ °Ç³×ÁÖ´Â Àμö´Â,
½ºÅ×ÀÌÆ®¸ÕÆ®ÁßÀÇ Ç÷¹À̽ºÈ¦´õ¿¡ ¹ÙÀεå ÇÏ´Â º¯¼öÀÇ °ªÀÇ ¹è¿ÀÌ µË´Ï´Ù.
À§Ä¡ ÁöÁ¤¿¡ ÀÇÇÑ ÆÄ¶ó¹ÌÅÍ,
Áï Àǹ® ºÎÈ£ (?
) ±×¸®°í ÆÄ¶ó¹ÌÅ͸¦ ÁöÁ¤ÇØ ÀÖ´Â °æ¿ì´Â,
¹ÙÀεå ÇÏ´Â °ªÀº Åë»óÀÇ ¹è¿·Î °Ç³×ÁÝ´Ï´Ù.
·Ê 10.34. À§Ä¡ ÁöÁ¤ ÆÄ¶ó¹ÌÅÍ¿¡ ÀÇÇÑ ½ºÅ×ÀÌÆ®¸ÕÆ®ÀÇ ½ÇÇà
<?php
$sql = 'SELECT * FROM bugs WHERE reported_by = ? AND bug_status = ?';
$stmt = new Zend_Db_Statement_Mysqli($db, $sql);
$stmt->execute(array('goofy', 'FIXED'));
À̸§ ´ÙÇØ ÆÄ¶ó¹ÌÅÍ,
Áï ¼±µÎ¿¡ ÄÚ·Ð (:
) (À»)¸¦ ºÙÀÎ ½Äº°ÀÚ·Î
ÆÄ¶ó¹ÌÅ͸¦ ÁöÁ¤ÇØ ÀÖ´Â °æ¿ì´Â, ¹ÙÀεå ÇÏ´Â °ªÀ» ¿¬»ó ¹è¿·Î °Ç³×ÁÝ´Ï´Ù.
¹è¿ÀÇ Å°°¡, ÆÄ¶ó¹ÌÅÍÀÇ À̸§¿¡ ´ëÀÀÇÕ´Ï´Ù.
·Ê 10.35. À̸§ ´ÙÇØ ÆÄ¶ó¹ÌÅÍ¿¡ ÀÇÇÑ ½ºÅ×ÀÌÆ®¸ÕÆ®ÀÇ ½ÇÇà
<?php
$sql = 'SELECT * FROM bugs WHERE reported_by = :reporter AND bug_status = :status';
$stmt = new Zend_Db_Statement_Mysqli($db, $sql);
$stmt->execute(array(':reporter' => 'goofy', ':status' => 'FIXED'));
PDO ÀÇ ½ºÅ×ÀÌÆ®¸ÕÆ®´Â À§Ä¡ ÁöÁ¤ ÆÄ¶ó¹ÌÅÍ¿Í À̸§ ´ÙÇØ ÆÄ¶ó¹ÌÅÍÀÇ ¾çÂÊ ¸ðµÎ¸¦ ¼Æ÷Æ®Çϰí ÀÖ½À´Ï´Ù. ±×·¯³ª, ÇϳªÀÇ SQL Áß(¾È)¿¡¼ ¾çÂÊ ¸ðµÎ¸¦ »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. Zend_Db_Statement Ŭ·¡½º¾È¿¡´Â PDO (À»)¸¦ »ç¿ëÇϰí ÀÖÁö ¾Ê´Â °Íµµ ÀÖ½À´Ï´Ù¸¸, ±×·¯ÇÑ ¾È¿¡´Â ¾î´ÀÂÊÀ̵ç ÀÏÁ¾·ùÀÇ Çü½ÄÀÇ ÆÄ¶ó¹ÌÅÍ ¹Û¿¡ ¼Æ÷Æ®ÇÏÁö ¾Ê´Â °Íµµ ÀÖÀ»Áöµµ ¸ð¸¨´Ï´Ù.
½ºÅ×ÀÌÆ®¸ÕÆ® ¿ÀºêÁ§Æ®ÀÇ ¸Þ¼Òµå¸¦ ÄÝ ÇÏ´Â °ÍÀ¸·Î, SQL ¹®ÀåÀÇ °á°ú ¼¼Æ®·ÎºÎÅÍ ÇàÀ» ÃëµæÇÒ ¼ö ÀÖ½À´Ï´Ù. SELECT,SHOW,DESCRIBE ±×¸®°í EXPLAIN µîÀÇ ½ºÅ×ÀÌÆ®¸ÕÆ®°¡ °á°ú ¼¼Æ®¸¦ µ¹·ÁÁÝ´Ï´Ù. INSERT,UPDATE ±×¸®°í DELETE µîÀÇ ½ºÅ×ÀÌÆ®¸ÕÆ®´Â °á°ú ¼¼Æ®¸¦ µ¹·ÁÁÖÁö ¾Ê½À´Ï´Ù. ÈÄÀÚ¿Í °°Àº SQL ¹®Àåµµ Zend_Db_Statement ±×¸®°í ½ÇÇàÇÒ ¼ö ÀÖ½À´Ï´Ù¸¸, ±× °á°ú·ÎºÎÅÍ ÇàÀ» ÃëµæÇÏ´Â ¸Þ¼Òµå¸¦ ÄÝ ÇÒ ¼ö ¾ø½À´Ï´Ù.
°á°ú ¼¼Æ®·ÎºÎÅÍ ´ÜÀÏÀÇ ÇàÀ» ÃëµæÇÏ·Á¸é , ½ºÅ×ÀÌÆ®¸ÕÆ® ¿ÀºêÁ§Æ®ÀÇ
fetch()
¸Þ¼Òµå¸¦ »ç¿ëÇÕ´Ï´Ù.
ÀÌ ¸Þ¼ÒµåÀÇ ¼¼ °³ÀÇ Àμö´Â, ¸ðµÎ »ý·« °¡´ÉÇÕ´Ï´Ù.
ÃÖÃÊÀÇ Àμö´Â Ãëµæ Çü½Ä (À»)¸¦ ÁöÁ¤ÇÕ´Ï´Ù.À̰ÍÀº, µ¹¾Æ°¡ °ªÀÇ ±¸Á¶¸¦ °áÁ¤ÇÏ´Â °ÍÀÔ´Ï´Ù. ¿©±â¼ ÁöÁ¤ÇÒ ¼ö ÀÖ´Â °ª°ú ´ëÀÀÇÏ´Â µ¹¾Æ°¡ °ª¿¡ ´ëÇØ¼´Â Ç×10.1.3.2. ¡¸ÆäÄ¡ ¸ðµåÀÇ º¯°æ¡¹ (À»)¸¦ ÂüÁ¶ÇØ ÁֽʽÿÀ.
µÎ¹øÂ°ÀÇ Àμö·Î ÁöÁ¤ÇÏ´Â °ÍÀº,
Ä¿¼ÀÇ Á¾·ù
ÀÔ´Ï´Ù.µðÆúÆ®´Â Zend_Db::FETCH_ORI_NEXT
±×¸®°í,fetch()
(À»)¸¦ ÄÝ ÇÒ ¶§¸¶´Ù
RDBMS ÇÏÁö¸¸ µ¹·ÁÁÖ´Â ¼ø¼·Î ´ÙÀ½ÀÇ ÇàÀ» µ¹·ÁÁشٰí ÇÏ´Â °ÍÀÔ´Ï´Ù.
3¹øÂ°ÀÇ Àμö·Î ÁöÁ¤ÇÏ´Â °ÍÀº
¿ÀÇÁ¼Â ÀÔ´Ï´Ù.
Ä¿¼ÀÇ Á¾·ù°¡ Zend_Db::FETCH_ORI_ABS ÀÇ °æ¿ì,
À̰ÍÀº °á°ú ¼¼Æ®¾ÈÀÇ ¸îÇà°¸¦ µ¹·ÁÁÖ´ÂÁö¸¦ ³ªÅ¸³À´Ï´Ù.
Ä¿¼ÀÇ Á¾·ù°¡ Zend_Db::FETCH_ORI_REL ÀÇ °æ¿ì,
À̰ÍÀº Á÷Àü¿¡ fetch()
(À»)¸¦ ÄÝ ÇßÀ» ¶§ÀÇ À§Ä¡·ÎºÎÅÍÀÇ »ó´ë À§Ä¡¸¦ ³ªÅ¸³À´Ï´Ù.
¹ú½á °á°ú ¼¼Æ®ÀÇ ¸ðµç ÇàÀÌ ÃëµæÀÌ ³¡³ »óÅÂÀÎ °æ¿ì´Â
fetch()
ÇÏ false
(À»)¸¦ µ¹·ÁÁÝ´Ï´Ù.
·Ê 10.36. ·çÇÁ³»¿¡¼ÀÇ fetch() ÀÇ »ç¿ë
<?php
$stmt = $db->query('SELECT * FROM bugs');
while ($row = $stmt->fetch()) {
echo $row['bug_description'];
}
PDOStatement::fetch() ÀÇ ¸Þ´º¾óµµ ÂüÁ¶ÇØ ÁֽʽÿÀ.
°á°ú ¼¼Æ®ÀÇ ¸ðµç ÇàÀ» ÇÑ ¹ø¿¡ ÃëµæÇÏ·Á¸é ,
fetchAll()
¸Þ¼Òµå¸¦ »ç¿ëÇÕ´Ï´Ù.
À̰ÍÀº, ·çÇÁ³»¿¡¼ fetch()
¸Þ¼Òµå¸¦ ¹Ýº¹ÇØ »ç¿ëÇØ ¸ðµç ÇàÀ» ¹è¿¿¡ °Ý³³ÇÏ´Â °Í°ú °°Àº °ÍÀÔ´Ï´Ù.
fetchAll()
¸Þ¼Òµå¿¡´Â µÎ Àμö¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÃÖÃÊÀÇ Àμö´Â, ¹æ±ÝÀü ¼³¸íÇÑ °Í°ú °°Àº Ãëµæ Çü½ÄÀÔ´Ï´Ù.
µÎ¹øÂ°ÀÇ Àμö´Â, µ¹·ÁÁÖ´Â Ä÷³ ¹øÈ£¸¦ ÁöÁ¤ÇÕ´Ï´Ù.À̰ÍÀº ÃÖÃÊÀÇ Àμö°¡
Zend_Db::FETCH_COLUMN ÀÎ °æ¿ì¿¡ »ç¿ëÇÕ´Ï´Ù.
·Ê 10.37. fetchAll() ÀÇ »ç¿ë¹ý
<?php
$stmt = $db->query('SELECT * FROM bugs');
$rows = $stmt->fetchAll();
echo $rows[0]['bug_description'];
PDOStatement::fetchAll() ÀÇ ¸Þ´º¾óµµ ÂüÁ¶ÇØ ÁֽʽÿÀ.
µðÆúÆ®¿¡¼´Â, ½ºÅ×ÀÌÆ®¸ÕÆ® ¿ÀºêÁ§Æ®°¡ °á°ú ¼¼Æ®ÀÇ ÇàÀ» µ¹·ÁÁÖ´Â Çü½ÄÀº ¿¬»ó ¹è¿·Î,
Ä÷³¸í°ú ±× Ä÷³ÀÇ °ªÀ» °ü·ÃÁöÀº °ÍÀÌ µË´Ï´Ù.
°á°ú¸¦ ´Ù¸¥ Çü½Ä¿¡¼ µ¹·ÁÁÖµµ·Ï(µíÀÌ) ÁöÁ¤ÇÏ´Â ¹æ¹ýÀº, ¾î´ðÅÍ Å¬·¡½ºÀÇ °æ¿ì¿Í °°½À´Ï´Ù.
½ºÅ×ÀÌÆ®¸ÕÆ® ¿ÀºêÁ§Æ®ÀÇ setFetchMode()
¸Þ¼Òµå·Î, Ãëµæ Çü½ÄÀ» ÁöÁ¤ÇÕ´Ï´Ù.ÁöÁ¤ÇÒ ¼ö ÀÖ´Â °ªÀº,Zend_Db Ŭ·¡½ºÀÇ Á¤¼ö
FETCH_ASSOC,FETCH_NUM,FETCH_BOTH,FETCH_COLUMN ±×¸®°í FETCH_OBJ ÀÔ´Ï´Ù.
À̰͵鿡 ´ëÇÑ ÀÚ¼¼ÇÑ °ÍÀº
Ç×10.1.3.2. ¡¸ÆäÄ¡ ¸ðµåÀÇ º¯°æ¡¹ (À»)¸¦ ÂüÁ¶ÇØ ÁֽʽÿÀ.
À̰ÍÀ» ÁöÁ¤Çϸé, ±× ÀÌÈÄÀÇ fetch()
¸Þ¼Òµå³ª
fetchAll()
¸Þ¼Òµå·Î ±× Çü½ÄÀ» »ç¿ëÇÏ°Ô µË´Ï´Ù.
·Ê 10.38. Ãëµæ Çü½ÄÀÇ ¼³Á¤
<?php
$stmt = $db->query('SELECT * FROM bugs');
$stmt->setFetchMode(Zend_Db::FETCH_NUM);
$rows = $stmt->fetchAll();
echo $rows[0][0];
PDOStatement::setFetchMode() ÀÇ ¸Þ´º¾óµµ ÂüÁ¶ÇØ ÁֽʽÿÀ.
°á°ú ¼¼Æ®ÀÇ ´ÙÀ½ÀÇ ÇàÀ¸·ÎºÎÅÍ ´ÜÀÏÀÇ Ä÷³ÀÇ °ªÀ» ÃëµæÇÏ·Á¸é
fetchColumn()
(À»)¸¦ »ç¿ëÇÕ´Ï´Ù.
ÃëµæÇÏ´Â Ä÷³ÀÇ À§Ä¡¸¦ ³ªÅ¸³»´Â À妽º¸¦ Àμö·Î ÁöÁ¤ÇÕ´Ï´Ù.
»ý·« ÇßÀ» °æ¿ìÀÇ µðÆúÆ®´Â 0 µË´Ï´Ù.ÀÌ ¸Þ¼Òµå´Â,
½ºÄ®¶óÄ¡¸¦ µ¹·ÁÁÝ´Ï´Ù.¸¸¾à °á°ú ¼¼Æ®ÀÇ ¸ðµç ÇàÀÌ ÀÌ¹Ì ÃëµæÀÌ ³¡³ »óÅÂÀÎ °æ¿ì´Â
false
(À»)¸¦ µ¹·ÁÁÝ´Ï´Ù.
ÀÌ ¸Þ¼ÒµåÀÇ µ¿ÀÛÀº, ¾î´ðÅÍ Å¬·¡½ºÀÇ
fetchCol()
¸Þ¼Òµå¿Í´Â ´Ù¸¥ °Í¿¡ ÁÖÀÇÇսôÙ.
½ºÅ×ÀÌÆ®¸ÕÆ® Ŭ·¡½ºÀÇ fetchColumn()
¸Þ¼Òµå´Â,
´ÜÀÏÀÇ ÇàÀÇ ´ÜÀÏÀÇ °ªÀ» µ¹·ÁÁÝ´Ï´Ù.¾î´ðÅÍÀÇ
fetchCol()
¸Þ¼Òµå´Â, °ªÀÇ ¹è¿À» µ¹·ÁÁÝ´Ï´Ù.
À̰ÍÀº, °á°ú ¼¼Æ®ÀÇ ¸ðµç ÇàÀÇ, ÃÖÃÊÀÇ Ä÷³ÀÇ °ªÀ» Áý°èÇÑ °ÍÀÔ´Ï´Ù.
·Ê 10.39. fetchColumn() ÀÇ »ç¿ë¹ý
<?php
$stmt = $db->query('SELECT bug_id, bug_description, bug_status FROM bugs');
$bug_status = $stmt->fetchColumn(2);
PDOStatement::fetchColumn() ÀÇ ¸Þ´º¾óµµ ÂüÁ¶ÇØ ÁֽʽÿÀ.
°á°ú ¼¼Æ®ÀÇ ÇàÀ» ¿ÀºêÁ§Æ®·Î¼ ÃëµæÇÏ·Á¸é
fetchObject()
(À»)¸¦ »ç¿ëÇÕ´Ï´Ù.ÀÌ ¸Þ¼ÒµåÀÇ Àμö´Â µÎ °³·Î,
¸ðµÎ »ý·« °¡´ÉÇÕ´Ï´Ù.ÃÖÃÊÀÇ Àμö¿¡´Â, µ¹¾Æ°¡ °ªÀÇ ¿ÀºêÁ§Æ®ÀÇ Å¬·¡½º¸íÀ» ÁöÁ¤ÇÕ´Ï´Ù.
µðÆúÆ®´Â 'stdClass' ÀÔ´Ï´Ù.µÎ¹øÂ°ÀÇ Àμö¿¡´Â ¹è¿À» ÁöÁ¤ÇÕ´Ï´Ù.
À̰ÍÀº, ÃÖÃÊÀÇ Àμö·Î ÁöÁ¤ÇÑ Å¬·¡½ºÀÇ constructor¡¡ ¡¡ ¿¡ °Ç³×ÁÖ´Â Àμö°¡ µË´Ï´Ù.
·Ê 10.40. fetchObject() ÀÇ »ç¿ë¹ý
<?php
$stmt = $db->query('SELECT bug_id, bug_description, bug_status FROM bugs');
$obj = $stmt->fetchObject();
echo $obj->bug_description;
PDOStatement::fetchObject() ÀÇ ¸Þ´º¾óµµ ÂüÁ¶ÇØ ÁֽʽÿÀ.