เรียนรู้การใช้งาน 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.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 และเรียงลำดับดังนี้
- Named Pipes
- 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
ความคิดเห็น