การติดต่อฐานข้อมูล MySQL, MongoDB, Microsoft SQL, PostgreSQL และ Oracle ด้วย Yii Framework 2

wave
มานพ กองอุ่น 6 เม.ย. 2016 03:33:20 45,187

เรียนรู้การใช้งาน Yii Framework 2 สำหรับการติดต่อฐานข้อมูลต่างๆ  โดยเปิดไฟล์สำหรับหรับตั้งค่าการเชื่อมต่อฐานข้อมูลในไฟล์ 

common/config/main-local.php

จากนั้นตั้งค่าการเชื่อมต่อในส่วนของ Components

return [
    'components' => [
        'db' => [],
        'pgsql' => [],
        .....
    ]
];

โดยมีรายละเอียดการเชื่อมต่อในแต่ละฐานข้อมูลดังนี้

MySQL

การเชื่อมต่อกับฐานข้อมูล MySQL นั้นสามารถเชื่อมต่อได้โดยค่าเริ่มต้นของ Yii Framework ในส่วนของ db ซึ่ง Yii Framework มีมาให้แล้ว

'db' => [
            'class' => 'yii\db\Connection',
            'dsn' => 'mysql:host=localhost;port=3306;dbname=databasename',
            'username' => 'root',
            'password' => '',
            'charset' => 'utf8',
        ],
host คือ ชื่อ mysql server อาจเป็นหมายเลข ip 127.0.0.1 หรือ localhost 
databasename คือ ชื่อฐานข้อมูล (Database name)
username คือ username สำหรับติดต่อฐานข้อมูล MySQL
password คือ password สำหรับ username ที่ใช้สำหรับติดต่อฐานข้อมูล MySQL

หากต้องการตรวจสอบว่าสามารถเชื่อมต่อได้ไหมให้ทดสอบโดยอาจเปิดไฟล์ frontend/controllers/SiteController.php จากนั้นแก้ไข actionIndex() โดยเพิ่มคำสั่งในการเปิดการเชื่อมต่อฐานข้อมูลตาม index ของ array ที่กำหนดดังนี้

public function actionIndex()
{
    Yii::$app->db->open();// ทดสอบการเชื่อมต่อ
    return $this->render('index');
}

แล้วทำการเปิดหน้า Web Application ที่ frontend/web/index.php?r=site/index หากไม่มี Exception แสดงว่าเชื่อมต่อได้สมบูรณ์

PostgreSQL

สำหรับการเชื่อมต่อกับฐานข้อมูล PostgreSQL นั้น หากยังไม่ได้ติดตั้งระบบจัดการฐานข้อมูลสามารถดาวน์โหลดและติดตั้งได้ที่เว็บไซต์ http://www.postgresql.org/ 

ทั้งนี้การเชื่อมต่อไปยังฐานข้อมูล PostgreSQL นั้นจะต้องเปิด Extension ของ PHP คือ php_pdo_pgsql หากยังไม่มีใน folder phpx.x.x/ext สามารถดาวน์โหลดได้ที่ https://pecl.php.net/package/PDO_PGSQL

การติดตั้ง php_pdo_pgsql ให้นำไฟล์ไปวางใน folder php.x.x/ext จากนั้นเพิ่มการเปิดใช้งานในไฟล์ php.ini โดย กำหนดในส่วนของ Dynamic Extensions ดังนี้

extension=php_pdo_pgsql.dll

เปิดไฟล์ common/config/main-local.php และเพิ่ม key index ที่มีชื่อว่า pgsql ในส่วน components ดังนี้

'pgsql' => [
            'class' => 'yii\db\Connection',
            'dsn' => 'pgsql:host=localhost;port=5432;dbname=databasename',
            'username' => 'username',
            'password' => 'password',
            'charset' => 'utf8',
        ],
ระบุ dsn เป็น pgsql
host เป็น database server ในที่นี้คือ localhost
port คือ port ในการเชื่อมต่อโดยค่าเริ่มต้นคือ 5432
dbname คือ ชื่อของฐานข้อมูล
username คือ username ที่ใช้ในการเชื่อมต่อฐานข้อมูล postgresql
password คือ password ของ user ที่ใช้ในการเชื่อมต่อฐานข้อมูล
charset คือ การกำหนดอักขระในการเชื่อมต่อในรูปแบบ utf8

หากต้องการตรวจสอบว่าสามารถเชื่อมต่อได้ไหมให้ทดสอบโดยอาจเปิดไฟล์ frontend/controllers/SiteController.php จากนั้นแก้ไข actionIndex() โดยเพิ่มคำสั่งในการเปิดการเชื่อมต่อฐานข้อมูลตาม index ของ array ที่กำหนดดังนี้

public function actionIndex()
{
    Yii::$app->pgsql->open();// ทดสอบการเชื่อมต่อ
    return $this->render('index');
}

แล้วทำการเปิดหน้า Web Application ที่ frontend/web/index.php?r=site/index หากไม่มี Exception แสดงว่าเชื่อมต่อได้สมบูรณ์

MongoDB

สำหรับ MongoDB นั้นเป็น noSQL อีกฐานข้อมูลหนึ่งที่ได้รับความนิยมอย่างกว้างขวาง

ที่มา http://www.techrepublic.com/article/nosql-databases-eat-into-the-relational-database-market/
ที่มา : http://www.techrepublic.com/article/nosql-databases-eat-into-the-relational-database-market/

ซึ่งสามารถดาวน์โหลดและติดตั้งได้โดยใช้เวลาไม่นานสามารถเข้าไปดาวน์โหลดได้ที่เว็บไซต์ http://www.mongodb.org/ 

คำสั่งการใช้งาน MongoDB เบื้องต้น

show dbs // list all database
use [database] //use or create database
db.addUser({user: "username", pwd: "password", roles: ["root"] })

หากต้องการดูฐานข้อมูล Collection และ ข้อมูลต่างๆ สามารถใช้โปรแกรม Mongo Desktop Admin เพื่อโหลดมาดูในแบบ GUI ได้ โดยดาวน์โหลดโปรแกรมได้ที่ 

https://docs.mongodb.org/ecosystem/tools/administration-interfaces/

Yii Framework เองก็มีการรองรับการทำงานของ MongoDB เช่นกัน แต่จะต้องทำการติดตั้ง Extension เพิ่มเติมด้วย Composer ดังนี้

php composer.phar require --prefer-dist yiisoft/yii2-mongodb

หรือเพิ่มในไฟล์ composer.json ดังนี้

"yiisoft/yii2-mongodb": "~2.0.0"

ทั้งนี้สามารถดูรายละเอียดของ Extension นี้ได้ที่ 

http://www.yiiframework.com/doc-2.0/ext-mongodb-index.html

จากนั้นติดตั้ง Driver สำหรับ MongoDB โดยสามารถดูรายละเอียดความเข้ากันได้ของ Version ได้จากเว็บไซต์ของ MongoDB  โดยเข้าเว็บไซต์ 

https://docs.mongodb.org/ecosystem/drivers/php/

และดาวน์โหลด PHP Extension MongoD ได้จาก 

https://pecl.php.net/package/mongodb

การติดตั้ง php_mongodb ให้นำไฟล์ไปวางใน folder php.x.x/ext จากนั้นเพิ่มการเปิดใช้งานในไฟล์ php.ini โดย กำหนดในส่วนของ Dynamic Extensions ดังนี้

extension=php_mongo.dll
extension=php_mongodb.dll

เปิดไฟล์ common/config/main-local.php และเพิ่ม key index ที่มีชื่อว่า mongodb ในส่วน components ดังนี้

'mongodb' => [
            'class' => '\yii\mongodb\Connection',
            'dsn' => 'mongodb://username:password@localhost:27017/databasename',
        ],
ระบุ dsn เป็น mongodb
username คือ username สำหรับเชื่อมต่อฐานข้อมูล
password คือ password ของ username สำหรับเชื่อมต่อฐานข้อมูล
localhost คือ database server
27017 คือ port สำหรับการเชื่อมต่อโดยค่าเริ่มต้น
databasename คือ ชื่อของฐานข้อมูล

หากต้องการตรวจสอบว่าสามารถเชื่อมต่อได้ไหมให้ทดสอบโดยอาจเปิดไฟล์ frontend/controllers/SiteController.php จากนั้นแก้ไข actionIndex() โดยเพิ่มคำสั่งในการเปิดการเชื่อมต่อฐานข้อมูลตาม index ของ array ที่กำหนดดังนี้

public function actionIndex()
{
    Yii::$app->mongodb->open();// ทดสอบการเชื่อมต่อ
    return $this->render('index');
}

แล้วทำการเปิดหน้า Web Application ที่ frontend/web/index.php?r=site/index หากไม่มี Exception แสดงว่าเชื่อมต่อได้สมบูรณ์

Microsoft SQL Server

สำหรับฐานข้อมูล Microsoft SQL Server นั้น Yii Framework เองก็สามารถเชื่อมต่อและใช้งานได้อย่างมีประสิทธิภาพเช่นเดียวกัน ใน MS SQL Server นั้นเราจะใช้ SQLSRV Extension สำหรับ PHP ในการเชื่อมต่อโดยสามารถดาวน์โหลดได้ที่ 

https://www.microsoft.com/en-us/download/details.aspx?id=20098

สำหรับ Version 32bit แต่น่าเสียดายที่ Official Site ไม่ได้ทำ 64bit มาให้ ทำให้เจ้า PHP ที่เราติดตั้ง 64bit ใช้งานไม่ได้ ดังนั้นเราต้องไปดาวน์โหลดจาก UnOfficial Site ได้ที่

https://onedrive.live.com/redir?resid=669EE24817961774%21720

สำหรับ Version 64bit ที่ Compile ใหม่ แล้ว 

เมื่อได้ Extension ของ PHP แล้วก็ทำการติดตั้งเพื่อให้โปรแกรม Extract ไปยัง Folder phpx.x.x/ext โดย Browse ไปยัง folder ดังกล่าว

การติดตั้ง php_sqlsrv ให้เพิ่มการเปิดใช้งานในไฟล์ php.ini โดย กำหนดในส่วนของ Dynamic Extensions ดังนี้

extension=php_sqlsrv_55_ts.dll
extension=php_pdo_sqlsrv_55_ts.dll

ติดตั้ง Microsoft ODBC Driver 11 for SQL Server โดยสามารถดาวน์โหลดได้ที่ 

https://www.microsoft.com/en-us/download/details.aspx?id=36434

ทำการ Configuration Server ในส่วนของ SQL Server Network Configuration ดังนี้

Search cliconfig.exe เมื่อโปรแกรมเปิดขึ้นมาในส่วนของ Tab General ให้ทำการ Enable protocols และเรียงลำดับดังนี้

  1. Named Pipes
  2. TCP/IP

จากนั้นเปิดโปรแกรม SQL Server Configuration Manager ไปในส่วน SQL Server Network Configuration แล้วคลิกที่ Protocols for SQLEXPRESS (หมายเหตุ SQLEXPRESS คือชื่อ Instance ของ SQL Server) จากนั้นกำหนดในส่วน Named Pipes เป็น Enabled และ TCP/IP เป็น Enabled เช่นกัน

ดับเบิ้ลคลิก TCP/IP เพื่อกำหนดรายละเอียดในส่วน IPAll โดยกำหนด TCP Port เป็น 1433

เปิดไฟล์ common/config/main-local.php และเพิ่ม key index ที่มีชื่อว่า mssql ในส่วน components ดังนี้

'mssql' => [
            'class' => 'yii\db\Connection',
            'dsn' => 'sqlsrv:Server=localhost;Database=databasename',
            //'emulatePrepare' => false,
            'username' => 'sa',
            'password' => 'password',
            //'charset' => 'utf8',
        ],
dsn กำหนดเป็น sqlsrv 
Server คือ ชื่อ database server ในที่นี้คือ localhost หรือสามารถระบุเป็นหมายเลข IP ได้
Database คือ ชื่อของฐานข้อมูล
username คือ username สำหรับเข้าใช้ฐานข้อมูล ในที่นี้คือ sa คือ username เริ่มต้น
password คือ password ของ user สำหรับเข้าใช้ฐานข้อมูล

หากต้องการตรวจสอบว่าสามารถเชื่อมต่อได้ไหมให้ทดสอบโดยอาจเปิดไฟล์ frontend/controllers/SiteController.php จากนั้นแก้ไข actionIndex() โดยเพิ่มคำสั่งในการเปิดการเชื่อมต่อฐานข้อมูลตาม index ของ array ที่กำหนดดังนี้

public function actionIndex()
{
    Yii::$app->mssql->open();// ทดสอบการเชื่อมต่อ
    return $this->render('index');
}

แล้วทำการเปิดหน้า Web Application ที่ frontend/web/index.php?r=site/index หากไม่มี Exception แสดงว่าเชื่อมต่อได้สมบูรณ์

Oracle

ในส่วนของ Oracle Database Yii Framework 2 ก็ยังสามารถเชื่อมต่อและใช้งานได้เช่นกันผ่าน PDO OCI 
ทดสอบโดยการติดตั้ง Oracle Database Express Edition 11g r2

http://www.oracle.com/technetwork/database/database-technologies/express-edition/downloads/index.html

หลังจากติดตั้งจะได้ username : system ส่วนรหัสผ่านนั้นเราได้กรอกในขั้นตอนติดตั้งแล้ว

เครื่องมือในการบริหารจัดการ 

http://www.oracle.com/technetwork/developer-tools/sql-developer/overview/index.html

สำหรับ PHP Extension สามารถดูรายละเอียดการติดตั้ง oci8 ได้ที่นี่

http://php.net/manual/en/oci8.requirements.php

เปิด php.ini แล้วนำ ; ออกจาก extension=php_pdo_oci.dll บันทึกและ restart Apache

และทำการเปิดการใช้งาน Extension ให้เรียบร้อย ตรวจสอบ phpinfo() จะเห็นลักษณะดังนี้

จากนั้นดาวน์โหลด instanceclient แล้วแตกไฟล์ไว้ที่ c:\instantclient_19_3 จากนั้นกำหนด PATH ของ System Environment

 

เปิดไฟล์ common/config/main-local.php และเพิ่ม key index ที่มีชื่อว่า oci ในส่วน components ดังนี้

'oci' => [
            'class' => 'yii\db\Connection',
            'dsn' => 'oci:host=//127.0.0.1:port=1521/orcl;charset=UTF8',
            'username' => 'system',
            'password' => 'password',
        ],
dsn กำหนดเป็น oci 
host คือ ชื่อ database server ในที่นี้คือ localhost หรือสามารถระบุเป็นหมายเลข IP ได้
port คือ port ในการเชื่อมต่อโดย Oracle 11g r2 นี้ใช้ 1521
orcl คือ ชื่อฐานข้อมูล
username คือ username สำหรับเข้าใช้ฐานข้อมูล ในที่นี้คือ system คือ username เริ่มต้น
password คือ password ของ user สำหรับเข้าใช้ฐานข้อมูล

สามารถกำหนดค่าอีกแบบได้ดังนี้

กำหนด TNS

$tns = "
      (DESCRIPTION =
          (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.40)(PORT = 1521)) )
          (CONNECT_DATA = (SERVICE_NAME = orcl) )
      )";

แก้ไขการตั้งค่าการเชื่อมต่อ

'oci' => [
            'class' => 'yii\db\Connection',
            'dsn' => 'oci:dbname='.$tns.';charset=UTF8',
            'username' => 'system',
            'password' => 'password',
        ],

หากต้องการตรวจสอบว่าสามารถเชื่อมต่อได้ไหมให้ทดสอบโดยอาจเปิดไฟล์ frontend/controllers/SiteController.php จากนั้นแก้ไข actionIndex() โดยเพิ่มคำสั่งในการเปิดการเชื่อมต่อฐานข้อมูลตาม index ของ array ที่กำหนดดังนี้

public function actionIndex()
{
    Yii::$app->oci->open();// ทดสอบการเชื่อมต่อ
    return $this->render('index');
}

แล้วทำการเปิดหน้า Web Application ที่ frontend/web/index.php?r=site/index หากไม่มี Exception แสดงว่าเชื่อมต่อได้สมบูรณ์

 

สรุป

Yii Framework 2 เป็น PHP Framework ที่มีความยืดหยุ่นสูงในการเชื่อมต่อและทำงานร่วมกับฐานข้อมูลได้หลากหลายโดยไม่กระทบกับ Code มากนัก หากเราเขียนในรูปแบบ MVC แล้ว การทำงานผ่าน Model และการเรียกใช้งานผ่าน Query Builder ก็จะไม่กระทบกับ Code มากนักเช่นกัน ทำให้การปรับเปลียนฐานข้อมูลนั้นเป็นเรื่องง่ายเลยทีเดียว

ในบทความนี้หวังว่าจะเป็นแนวทางให้ผู้ที่กำลังเลือกใช้ Yii Framework 2 ในการเชื่อมต่อกับฐานข้อมูลที่ต้องการสามารถนำไปประยุกต์ใช้ได้ และหากมีข้อสงสัยหรือมีข้อผิดพลาดประการใดกรุณาแจ้งได้ที่ contact@programmerthailand.com หรือแสดงความคิดเห็นที่ Disqus ด้านล่าง ขอบคุณครับ ^ ^ @Programmer Thailand Team


ความคิดเห็น

หากบทเรียนรู้มีความผิดพลาดประการใด หรือมีข้อเสนอแนะกรุณาแจ้ง contact@programmerthailand.com

เขียนบทเรียนรู้ของคุณ

รายละเอียด
  • ดู 45,187
  • รักเลย 0
  • หมวดหมู่ Yii Framework 2 (Yii2)
  • เขียนเมื่อ
  • แก้ไขเมื่อ
  • Tags yii mongodb mssql postgresql mysql oracle
ข้อมูลผู้เขียน
มานพ กองอุ่น

มานพ กองอุ่น

เป็นสมาชิกเมื่อ: 18 ธ.ค. 2009

เนื้อหาที่เกี่ยวข้อง