PDO 2013-10-27 20:34:07 µ¥ÀÌÅͺ£À̽º¶õ? µ¥ÀÌÅÍÀÇ ÀúÀå, Á¶È¸, ¼öÁ¤À» Æí¸®ÇÏ°í ¾ÈÀüÇÏ°Ô ÇÒ ¼ö ÀÖµµ·Ï °í¾ÈµÈ ¼ÒÇÁÆ®¿þ¾î´Ù. MySQLÀ̶õ? µ¥ÀÌÅͺ£À̽º¶ó´Â ºÐ·ùÀÇ Á¦Ç°±º¿¡ ¼ÓÇÑ ±¸Ã¼ÀûÀÎ »óǰÀ¸·Î ORACLE¿¡ ÀÇÇØ¼ °³¹ßµÇ°í ÀÖ´Ù. ¿ÀǼҽºÀ̰í, °¡Àå ¸¹Àº »ç¿ëÀÚ¸¦ °¡Áö°í ÀÖ´Â µ¥ÀÌÅͺ£À̽º ½Ã½ºÅÛ¿¡ ¼ÓÇÑ´Ù. MySQL°ú °°Àº ºÐ·ù¿¡ ¼ÓÇÑ µ¥ÀÌÅͺ£À̽º·Î´Â ORACLE, MSSQL µîÀÌ ÀÖ´Ù. µ¥ÀÌÅͺ£À̽º¿Í PHP ÀϹÝÀûÀ¸·Î µ¥ÀÌÅ͸¦ ÀúÀåÇØ¾ß ÇÏ´Â ¿¡Çø®ÄÉÀ̼ÇÀ» ±¸ÃàÇÏ´Â °æ¿ì µ¥ÀÌÅÍ´Â µ¥ÀÌÅͺ£À̽º ¼¹ö¿¡ ÀúÀåÇÑ´Ù. PHP ¿¡Çø®ÄÉÀ̼ÇÀÇ Äڵ忡´Â µ¥ÀÌÅͺ£À̽º ¼¹ö¿¡ Á¢¼ÓÇØ¼ µ¥ÀÌÅ͸¦ Á¶È¸/¼öÁ¤/»èÁ¦ÇÏ´Â Äڵ带 ÀÛ¼ºÇÑ´Ù. PHP ¿¡Çø®ÄÉÀ̼ÇÀÌ È£ÃâµÇ¸é PHP ¿£ÁøÀº PHP ¿¡Çø®ÄÉÀ̼ÇÀÇ Äڵ忡 µû¶ó¼ µ¥ÀÌÅͺ£À̽ºÀÇ Å¬¶óÀÌ¾ðÆ®°¡ µÇ¾î¼ µ¥ÀÌÅͺ£À̽º¿¡ Á¢¼ÓÇØ¼ ¿©·¯°¡Áö ÀÛ¾÷À» ó¸®ÇÑ´Ù. ¼±ÇàÁö½Ä º» ¼ö¾÷Àº µ¥ÀÌÅͺ£À̽º¿¡ ´ëÇÑ ¼ö¾÷ÀÌ ¾Æ´Ï¶ó PHP¸¦ ÀÌ¿ëÇØ¼ µ¥ÀÌÅͺ£À̽º¸¦ Á¦¾îÇÏ´Â ¹æ¹ý¿¡ ´ëÇÑ ¼ö¾÷ÀÌ´Ù. µû¶ó¼ µ¥ÀÌÅͺ£À̽º ÀÚü¿¡ ´ëÇÑ ¼³¸íÀº ¼ö¾÷ÀÇ ¹üÀ§¿¡ Æ÷ÇÔµÇÁö ¾Ê±â ¶§¹®¿¡ MySQL ¼ö¾÷À» Âü°íÇÑ´Ù. ¼±ÇàÀÛ¾÷ ¾Æ·¡ÀÇ ¸í·ÉÀ» ÀÔ·ÂÇØ¼ µ¥ÀÌÅͺ£À̽º¸¦ »ý¼ºÇÑ´Ù. ¾Æ·¡ÀÇ ¸í·ÉÀº opentutorials¶ó´Â µ¥ÀÌÅͺ£À̽º¸¦ »ý¼ºÇÑ´Ù. 1 CREATE DATABASE opentutorials CHARACTER SET utf8 COLLATE utf8_general_ci; ¾Æ·¡ ¸í·ÉÀ» ÀÔ·ÂÇØ¼ µ¥ÀÌÅͺ£À̽º opentutorials¸¦ ¼±ÅÃÇÑ´Ù. 1 use opentutorials; ¾Æ·¡ ¸í·ÉÀ» ÀÔ·ÂÇØ¼ µ¥ÀÌÅͺ£À̽º opentutorials ³»¿¡ Å×À̺í topicÀ» »ý¼ºÇÑ´Ù. 1 2 3 4 5 6 7 CREATE TABLE topic ( id int(11) NOT NULL AUTO_INCREMENT, title varchar(255) NOT NULL , description text NULL , created datetime NOT NULL , PRIMARY KEY (id) ); PDO PDO(PHP Data Objects)¶õ ¿©·¯°¡Áö µ¥ÀÌÅͺ£À̽º¸¦ Á¦¾îÇÏ´Â ¹æ¹ýÀ» Ç¥ÁØÈ½ÃŲ °ÍÀÌ´Ù. µ¥ÀÌÅͺ£À̽º´Â ´Ù¾çÇÑ Á¾·ù°¡ ÀÖ´Ù. ±×¸®°í Á¾·ù¿¡ µû¶ó¼ ¼·Î ´Ù¸¥ µå¶óÀ̺긦 »ç¿ëÇØ ¿Ô´Âµ¥ µå¶óÀ̺êÀÇ Á¾·ù¿¡ µû¶ó¼ µ¥ÀÌÅͺ£À̽º¸¦ Á¦¾îÇϱâ À§ÇÑ API°¡ ´Þ¶ú´Ù. PDO¸¦ »ç¿ëÇÏ¸é µ¿ÀÏÇÑ ¹æ¹ýÀ¸·Î µ¥ÀÌÅͺ£À̽º¸¦ Á¦¾îÇÒ ¼ö ÀÖ´Ù. PHPÀÇ mysql client library(mysql_connect¿Í °°Àº ÇÔ¼ö)´Â PHP 5.5 ¹öÀüºÎÅÍ Áö¿øµÇÁö ¾ÊÀ» ¿¹Á¤ÀÌ´Ù. µû¶ó¼ ´õ ÀÌ»ó »õ·Î¿î ¿¡Çø®ÄÉÀ̼ÇÀÇ °æ¿ì mysql client library¸¦ »ç¿ëÇØ¼´Â ¾ÈµÈ´Ù. ÇÏÁö¸¸ »ç¿ëÇϴ ȯ°æÀÌ PDO³ª mysqli¸¦ Áö¿øÇÏÁö ¾Ê°Å³ª ±âÁ¸ÀÇ Äڵ尡 mysql client library¶ó¸é À̰ÍÀÇ »ç¿ë¹ýÀ» ¾Ë¾Æ¾ß ÇÑ´Ù. ÀÌ·± °æ¿ì µ¥ÀÌÅͺ£À̽º¿Í PHP ¼ö¾÷À» Âü°íÇÑ´Ù. ¶ÇÇÑ PHP¿¡ ´ëÇÑ ¿Ã¹Ù¸¥ »ç¿ë¹ýÀ» ÀüÆÄÇϰí ÀÖ´Â PHP Right Way¿¡¼´Â PDO¸¦ »ç¿ëÇÒ °ÍÀ» ±ÇÇϰí ÀÖ´Ù. ÀÌ¿¡ ´ëÇÑ ³»¿ëÀº PHP Right WayÀÇ µ¥ÀÌÅͺ£À̽º ÆíÀ» Âü°íÇÑ´Ù. ¿¹Á¦ Æ®·¯ºí½´ÆÃ ¸¸¾à ¾Æ·¡¿Í °°Àº ¿¡·¯°¡ ¹ß»ýÇÑ´Ù¸é PDO MySQL ÀͽºÅÙ¼ÇÀÌ ¼³Ä¡µÇÁö ¾Ê¾Ò±â ¶§¹®ÀÌ´Ù. 1 Fatal error: Uncaught exception 'PDOException' with message 'could not find driver' in D:\BitNami\wampstack-5.4.21-0\apache2\htdocs\database\list.php:4 Stack trace: #0 D:\BitNami\wampstack-5.4.21-0\apache2\htdocs\database\list.php(4): PDO->__construct('mysql:host=loca...', 'root', '111111') #1 {main} thrown in D:\BitNami\wampstack-5.4.21-0\apache2\htdocs\database\list.php on line 4 À̸¦ ÇØ°áÇϱâ À§Çؼ´Â PDO ÀͽºÅÙ¼ÇÀ» Ȱ¼ºÈÇØ¾ß ÇÑ´Ù. BitnamiÀÇ À©µµ¿ì ¹öÀüÀÎ °æ¿ì ¾Æ·¡¿Í °°ÀÌ Ã³¸®ÇÑ´Ù. phpÀÇ µð·ºÅ丮°¡ D:\BitNami\wampstack-5.4.21-0\phpÀÏ °æ¿ì D:\BitNami\wampstack-5.4.21-0\php\php.ini ÆÄÀÏÀ» ¿°í ¾Æ·¡ÀÇ ÄÚµå ¾ÕÀÇ ;À» Á¦°ÅÇÑ´Ù. 1 extension=php_pdo_mysql.dll ±×¸®°í ÀͽºÅÙ¼ÇÀÇ dll ÆÄÀÏÀÌ ¼³Ä¡µÈ µð·ºÅ丮ÀÇ ±âº»°æ·Î¸¦ º¯°æÇØÁØ´Ù. ¾Æ·¡ÀÇ °æ·Î´Â ÇÊÀÚ°¡ ¼³Ä¡ÇÑ Bitnami¸¦ ±âÁØÀ¸·Î ÇÑ °ÍÀ̱⠶§¹®¿¡ »ç¿ëÀÚ¸¶´Ù ´Ù¸¦ ¼ö ÀÖ´Ù. ÀÚ½ÅÀÇ È¯°æ¿¡ ¸Â°Ô ¼öÁ¤ÇØÁØ´Ù. 1 extension_dir = "D:\BitNami\wampstack-5.4.21-0\php\ext" ¿¹Á¦ ¾Æ·¡ÀÇ ÆÄÀÏÀº Àü¼Û ¹öưÀ» ´·¶À» ¶§ process.php ÆÄÀÏ·Î µ¥ÀÌÅ͸¦ Àü¼ÛÇÑ´Ù. input.php 1 2 3 4 5 6 7 8 9 10 11 12 13
¾Æ·¡ÀÇ ÆÄÀÏÀº µ¥ÀÌÅͺ£À̽º¸¦ Á¶ÀÛÇÏ´Â ÀÛ¾÷À» ¸ð¾ÆµÐ PHP ¿¡Çø®ÄÉÀ̼ÇÀÌ´Ù. URL¿¡ Æ÷ÇÔµÈ modeÀÇ °ª¿¡ µû¶ó¼ ´Ù¸¥ ÀÛ¾÷À» Çϵµ·Ï switch ¹®À» »ç¿ëÇß´Ù. process.php 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 "SET NAMES utf8")); switch($_GET['mode']){ case 'insert': $stmt = $dbh->prepare("INSERT INTO topic (title, description, created) VALUES (:title, :description, now())"); $stmt->bindParam(':title',$title); $stmt->bindParam(':description',$description); $title = $_POST['title']; $description = $_POST['description']; $stmt->execute(); header("Location: list.php"); break; case 'delete': $stmt = $dbh->prepare('DELETE FROM topic WHERE id = :id'); $stmt->bindParam(':id', $id); $id = $_POST['id']; $stmt->execute(); header("Location: list.php"); break; case 'modify': $stmt = $dbh->prepare('UPDATE topic SET title = :title, description = :description WHERE id = :id'); $stmt->bindParam(':title', $title); $stmt->bindParam(':description', $description); $stmt->bindParam(':id', $id); $title = $_POST['title']; $description = $_POST['description']; $id = $_POST['id']; $stmt->execute(); header("Location: list.php?id={$_POST['id']}"); break; } ?> ¾Æ·¡ÀÇ ÆÄÀÏÀº µ¥ÀÌÅͺ£À̽º¿¡ ÀúÀåµÈ ÅäÇÈÀÇ ¸®½ºÆ®¿Í ¼±ÅÃµÈ ÅäÇÈÀÇ ÀÚ¼¼ÇÑ Á¤º¸¸¦ ȸ鿡 Ãâ·ÂÇÏ´Â ¿¡Çø®ÄÉÀ̼ÇÀÌ´Ù. list.php 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 prepare('SELECT * FROM topic'); $stmt->execute(); $list = $stmt->fetchAll(); if(!empty($_GET['id'])) { $stmt = $dbh->prepare('SELECT * FROM topic WHERE id = :id'); $stmt->bindParam(':id', $id, PDO::PARAM_INT); $id = $_GET['id']; $stmt->execute(); $topic = $stmt->fetch(); } ?>