PHPããMySQLãæ±ãæ¹æ³ã解説
äžççã«åºã䜿ãããŠãããªãŒãã³ãœãŒã¹ã®ããŒã¿ããŒã¹ã®ã²ãšã€ã«ãMySQLããããŸãããã·ã³ãã«ã§éããPHPãJavaãªã©ãšç°¡åã«æ¥ç¶ã§ãããããšãç¹åŸŽã®MySQLã§ãããä»åã¯ãã®MySQLãPHPããæ¥ç¶ããæ±ãããã®æ¹æ³ã解説ããŠãããŸããäžççã«åºã䜿ãããŠãããªãŒãã³ãœãŒã¹ã®ããŒã¿ããŒã¹ã®ã²ãšã€ã«ãMySQLããããŸããå€ãã®ã·ã¹ãã ãWEBã¢ããªçã§å©çšãããŠããMySQLã§ãããPHPã«ã¯MySQLãšç°¡åã«æ¥ç¶ããããšãã§ããã¯ã©ã¹ãçšæãããŠããŸãã
MySQLãšã¯
MySQLãšã¯äžççã«åºã䜿ãããŠããããŒã¿ããŒã¹ã®ã²ãšã€ã§ãããªãŒãã³ãœãŒã¹ã®ããŒã¿ããŒã¹ãšããŠå ¬éãããŠãããåããŠããŒã¿ããŒã¹ã®åŠç¿ããã人ããå人ã§éçºãè¡ãéã«ãããããã®ããŒã¿ããŒã¹ã§ãã
ããŒã¿ããŒã¹ãšã¯
ããŒã¿ããŒã¹ãšã¯ç«¯çã«èšãã°æ å ±ã®éãŸãã§ããããã°ã©ã ã§WEBã¢ããªãWEBã·ã¹ãã ãã¹ããã¢ããªçã䜿çšããå Žåããã®ã¢ããªçã«å¿ èŠãªæ å ±ã¯å šãŠããã°ã©ã äžã«ååšããããã§ã¯ãããŸãããå€ãã®å Žåããããã£ãå¿ èŠãªæ å ±ã¯ãæ å ±ã管çã»éèšããããã«ã€ãããããããŒã¿ããŒã¹ãã«ä¿åãããŸãã
MySQLã®ç¹åŸŽ
ããã°ã©ã ãæŽ»çšããããŒã¿ããŒã¹ã«ã¯æ§ã
ãªãã®ããããŸããMySQLã¯äžççã«äœ¿ãããŠãã人æ°ã®ããŒã¿ããŒã¹ã®ã²ãšã€ã§ãã
MySQLã®ä»ã«ã¯PostgreSQLãMongoDBãªã©ãæåã§ãã
æ§ã
ãªããŒã¿ããŒã¹ã®äžã§ãMySQLã®ç¹åŸŽãšãããŠããã®ã¯ãã·ã³ãã«ã§éããPHPãJavaãªã©ãšç°¡åã«æ¥ç¶ã§ãããããšã§ãã
ãŸããã®ä»ã«ãããã«ããŠãŒã¶å¯Ÿå¿ããããŠãããè€æ°äººãåæã«å©çšå¯èœã§ãããšããç¹ããŸããMySQLã®ç¹åŸŽã§ãã
PHPã§MySQLãæ±ã
ããŒã¿ããŒã¹ã¯ããã ããŒã¿ããŒã¹åäœã§éçšããããã®ã§ã¯ãããŸãããåºæ¬çã«ã¯ãããã°ã©ã ãšããŒã¿ããŒã¹ã飿ºãããããšã§ãæ§ã ãªWEBã¢ããªãã·ã¹ãã ãå®çŸãããã®ã§ããPHPããMySQLã«æ¥ç¶ããŠãããŒã¿ããŒã¹ããå€ãååŸããããå€ãæžã蟌ãã ãããããã«ã¯PDO ( PHP Data Object ) ãšããããŒã¿ããŒã¹æ¥ç¶çšã®ã¯ã©ã¹ã䜿çšããŸãã
PDOã§PHPããMySQLã«æ¥ç¶ãã
localhostã®MySQLãµãŒãã«æ¥ç¶ããå Žåã¯ã次ã®ããã«PDOã®ã³ã³ã¹ãã©ã¯ã¿ãåŒã³åºããŸãã
// 以äžã«æ¥ç¶ãã
// DBåïŒfoo_db
// ãŠãŒã¶åïŒuser
// ãã¹ã¯ãŒãïŒâpassâ
$pdo = new PDO('mysql:host=localhost;dbname=foo_db', âuserâ, âpassâ);
ã³ã³ã¹ãã©ã¯ã¿ã«æž¡ãåŒæ°ã¯æ¬¡ã®éãã§ãã
- 第1åŒæ°ïŒæ¥ç¶å ïŒDSNïŒããŒã¿ãœãŒã¹åïŒ
- 第2åŒæ°ïŒãŠãŒã¶å
- 第3åŒæ°ïŒãã¹ã¯ãŒã
ãã®ãã¡ç¬¬1åŒæ°ã®æ¥ç¶å ( DSNïŒããŒã¿ãœãŒã¹å ) ã¯MySQLã«æ¥ç¶ããå Žåãåºæ¬çã«ã¯æ¬¡ã®ãããªæžåŒã§æžããŸãã
mysql:host=[ãã¹ãå];port=[ããŒãçªå·];dbname=[ããŒã¿ããŒã¹å]
ãã ããportã«ã€ããŠã¯ãMySQLãããã©ã«ãã®ããŒãçªå·3306ã§èµ·åããŠããå Žåã«ã¯çç¥ããããšãå¯èœã§ããäžèšã®ãµã³ãã«ã³ãŒãã§ã¯portãçç¥ããŠããŸãã
PHPã§MySQLã«ããŒã¿ããŒã¹ãäœæãã
MySQLã«æ¥ç¶ããããæ¬¡ã¯MySQLã«å¯ŸããŠPHPããSQLæãå®è¡ããŸããSQLãšã¯ããŒã¿ããŒã¹ãæäœããããã®ãåãåããèšèªãã§ããSQLã®åºæ¬æ§æã«ã€ããŠã¯MySQLå ¬åŒã®ãªãã¡ã¬ã³ã¹ããã¥ã¢ã« çã§è©³ãã解説ãããŠããã®ã§ããã¡ãããåç §ãã ããã
PHPããMySQLã«SQLæãå®è¡ããããã®ãã£ãšãåºæ¬çãªæ¹æ³ã¯ãPDOã¯ã©ã¹ã®query()ã¡ãœããã䜿çšããããšã§ããquery()ã¡ãœããã¯ãPDOã¯ã©ã¹ãæã€SQLå®è¡çšã®ã¡ãœããã§ã第1åŒæ°ã«å®è¡ãããSQLæãæååãšããŠæå®ããããšã§ããã®SQLãå®è¡ããããšãã§ããŸãã
query()ã¡ãœããã§tableäœæãããŒã¿ã®å ¥åãããŒã¿ã®ååŸãè¡ãå®éã®ãµã³ãã«ã³ãŒãã¯ä»¥äžã®éãã§ãã
// MySQLæ¥ç¶
$pdo = new PDO('mysql:host=localhost;dbname=foo_db', âuserâ, âpassâ);
// tableäœæ
$pdo->query('CREATE TABLE foo_table (id INT, name VARCHAR(20))');
// äœæããããŒãã«ã«ããŒã¿ãå
¥åãã
$pdo->query('INSERT INTO foo_table (id, name) VALUES (1, "yamada")');
// ããŒãã«å
šè¡ååŸïŒããŒã¿ååŸïŒ
$result_rows = $pdo->query('SELECT * FROM foo_table');
query()ã¡ãœããã¯SQLæã®å®è¡çµæãè¿åŽããŸãããã®ãããããŒã¿ååŸã®ãµã³ãã«ã³ãŒãã§è¿åŽå€ã倿°result_rowsã«æ ŒçŽããŠããŸããããã®å€æ°ã®äžã«ã¯SQLæã®å®è¡çµæãšããŠãããŒãã«ã®å šè¡ã®ããŒã¿ãèšå®ãããŠããŸãã
ãªããpdoã¡ãœããã®è¿åŽå€ã¯PDOStatementãšããã¯ã©ã¹ã®å€ãšããŠè¿åŽãããŠãããããã¯é ååæ§foreachæã§æ±ãããšã®ã§ããåãšãªã£ãŠããŸãã
ãã®ããããã®å€æ°ã®äžèº«ãç»é¢ã«åºåããå Žåãæ¬¡ã®ããã«æžãããšãã§ããŸãã
foreach ( $result_rows as $row ) {
// ããŒãã«ã®1è¡ããšã«1ã€ã®é
åãšããŠæ ŒçŽãããŠããïŒ$rowïŒ
// ãã®1è¡ããšã®é
åå
ã§ãååãããŒã«ãã飿³é
åã§ããŒã¿ãæ ŒçŽãããŠããã
echo "id: {$row['id']}"; // idå
echo "name: {$row['name']}"; // nameå
}
ãŸããåã«SQLæãå®è¡ããã®ã¿ã§ããã°query()ã¡ãœããã§äºè¶³ããŸããããã©ã¡ãŒã¿ã®ã¿ç°ãªãåãSQLæãè€æ°åå®è¡ãããšãçã¯PDOã¯ã©ã¹ã®prepare()ã¡ãœãããæå¹ã§ããprepare()ã¡ãœããã«ã¯ä»¥äžã®ç¹åŸŽããããŸãã
- ã¡ãœããå®è¡åŸããã«SQLæãå®è¡ãããªãïŒPDOStatementã¯ã©ã¹ã®execute()ã¡ãœããã§SQLæãå®è¡ãããïŒ
- execute()å®è¡æã«çšæããSQLæã«ãã©ã¡ãŒã¿ãæž¡ãã
prepareã¡ãœããã䜿ã£ãŠSQLæãå®è¡ããã«ã¯ã次ã®ããã«æžããŸãã
// MySQLæ¥ç¶
$pdo = new PDO('mysql:host=localhost;dbname=foo_db', âuserâ, âpassâ);
// prepare()ã¡ãœãã1 ã¯ãŠãªããŒã¯ïŒ?ïŒã§ãã©ã¡ãŒã¿æå®
$pdoStatment1 = $pdo->prepare('INSERT INTO saitama_test (id, name) VALUES (?, ?)');
$pdoStatment1->execute(array(2, "akamine"));
// prepare()ã¡ãœãã2 ã³ãã³ïŒ:ïŒã§ãã©ã¡ãŒã¿æå®
$pdoStatment2 = $pdo->prepare('INSERT INTO saitama_test (id, name) VALUES (:id, :name)');
$pdoStatment2->execute(array(":id"=>3, ":name"=>"nishiyama"));
prepare()ã¡ãœããã§SQLæã«ãã©ã¡ãŒã¿ãèšå®ããããã«ã¯ãäžèšãµã³ãã«ã³ãŒãäžã«ãããããã«ããµãã€ã®æ¹æ³ããããŸãã
ã²ãšã€ç®ã¯ãã¯ãŠãªããŒã¯ïŒ?ïŒãå©çšããæ¹æ³ã§ãã
prepare()ã¡ãœããã®ç¬¬äžåŒæ°ã«æå®ããSQLæäžã®ãã©ã¡ãŒã¿ã®ãã¡ãexecute()å®è¡æã«å€ãèšå®ããããã©ã¡ãŒã¿ãã¯ãŠãªããŒã¯ã«ãããšããã®å€ã¯åããé ã«execute()ã¡ãœããã®ç¬¬äžåŒæ°ã«æå®ãããé åã®èŠçŽ ãå é ããå²ãåœãŠãããŠãããŸãã
ãµã³ãã«ã³ãŒãäžã§ã¯ã$pdoStatment1->execute(array(2, "akamine"));ããšããããã«ãæåã®ã¯ãŠãªããŒã¯ã«ã¯2ããæ¬¡ã®ã¯ãŠãªããŒã¯ã«ã¯âakamineâãæå®ãããç¶æ ã§SQLæãå®è¡ãããŸãã
ããã²ãšã€ã®æ¹æ³ã¯ãã³ãã³ïŒ:ïŒãå©çšããæ¹æ³ã§ãã
SQLæäžã®ãã©ã¡ãŒã¿ã®ãã¡ãexecute()å®è¡æã«å€ãèšå®ããããã©ã¡ãŒã¿ããã³ãã³ + ãã©ã¡ãŒã¿åããšãã圢ã«å€ããŸãã
ãããšãµã³ãã«ã³ãŒãã®ããã«ãexecute()ã®ç¬¬äžåŒæ°ã«é£æ³é
åã§ãã©ã¡ãŒã¿ãæå®ã§ããŸãã
query()ã¡ãœãããšprepare()ã¡ãœããã䜿ãåãã§ãããšå¹çããMySQLãæäœããã³ãŒããPHPã§æžãããšãã§ããŸãã
ç¶æ³ã«å¿ããŠé©åãªã¡ãœããã䜿ããŸãããã













