ในบทเรียนรู้นี้มาทำความเข้าใจการติดต่อฐานข้อมูลด้วย PHP Data Object หรือ PDO โดยที่ PDO นั้นสามารถติดต่อฐานข้อมูลได้หลากหลายฐานข้อมูล เช่น MySQL, Microsoft SQL, SQLite, PosgreSQL, MongoDB หรือแม้แต่ Oracle ก็ได้เช่นกัน ในบทเรียนรู้นี้มาลองทำการติดต่อฐานข้อมูลต่างๆ กัน
ดูความนิยมของ Database Engine
ดูเพิ่มเติมได้ที่
http://db-engines.com/en/ranking
เว็บไซต์อย่างเป็นทางการของ PDO
http://php.net/manual/en/book.pdo.php
รูปแบบการเชื่อมต่อ
public PDO::__construct ( string $dsn [, string $username [, string $password [, array $options ]]] )
การเชื่อมต่อไปยังฐานข้อมูล MySQL
MySQL เป็นระบบจัดการฐานข้อมูลเชิงสัมพันธ์ (Relational Database Management System (RDBMS)) ที่ได้รับความนิยมเช่นกัน เว็บไซต์อย่างเป็นทางการคือ
http://www.mysql.com
ตัวอย่างการเชื่อมต่อ
<?php
//database_connection.php
//ติดต่อฐานข้อมูล MySQL
try {
$mysql['host'] = 'localhost';//database host
$mysql['username'] = 'root';//username ที่เชื่อมต่อฐานข้อมูล
$mysql['password'] = '';//password สำหรับ username
$mysql['database'] = 'php_tutorial';//ชื่อฐานข้อมูล
$con_mysql = new PDO("mysql:host=".$mysql['host']."; dbname=".$mysql['database']."",
$mysql['username'],$mysql['password'],
[PDO::MYSQL_ATTR_INIT_COMMAND=>"SET NAMES utf8"]); //กำหนดการเชื่อมต่อเป็น utf8
}catch(PDOException $e){//ดักจับ ERROR แล้วเก็บไว้ใน $e
echo $e->getMessage();# แสดงออกมาหน้าจอ
}
ตัวอย่างหน้า Error เมื่อเชื่อมต่อฐานข้อมูลไม่ได้ในกรณีที่ยังไม่ได้สร้างฐานข้อมูล php_tutorial
SQLSTATE[HY000] [1049] Unknown database 'php_tutorial'
การเชื่อมต่อไปยังฐานข้อมูล PosgreSQL
PosgreSQL เป็นฐานข้อมูล Open Source ที่ได้รับความนิยมเช่นกัน เว็บไซต์อย่างเป็นทางการคือ
http://www.postgresql.org/
Extension PHP ที่เปิดใช้งาน
php_pdo_pgsql.dll
ตัวอย่างการเชื่อมต่อ
//...
try {
$pos['host'] = 'localhost';//database host
$pos['username'] = 'postgres';//username ที่เชื่อมต่อฐานข้อมูล
$pos['password'] = 'password';//password สำหรับ username
$pos['database'] = 'php_tutorial';//ชื่อฐานข้อมูล
$com_pos = new PDO("pgsql:host=".$pos['host'].";port=5432;dbname=".$pos['database'].";",$pos['username'],$pos['password'],
[PDO::MYSQL_ATTR_INIT_COMMAND=>"SET NAMES utf8"]);
} catch (PDOException $e) {
echo $e->getMessage();
}
ตัวอย่างเมื่อเกิด Error
SQLSTATE[08006] [7] could not connect to server: Connection refused (0x0000274D/10061) Is the server running on host "localhost" (::1) and accepting TCP/IP connections on port 5432? could not connect to server: Connection refused (0x0000274D/10061) Is the server running on host "localhost" (127.0.0.1) and accepting TCP/IP connections on port 5432?
การเชื่อมต่อไปยังฐานข้อมูล MongoDB
MongoDB เป็น NoSQL เว็บไซต์อย่างเป็นทางการคือ
http://mongodb.org
php extension สำหรับ MongoDB
https://docs.mongodb.com/ecosystem/drivers/php/
https://secure.php.net/mongodb
https://pecl.php.net/package/mongodb
Extension PHP ที่ใช้งาน
php_mongodb.dll
หมายเหตุ การเชื่อมต่อไปยังฐานข้อมูล MongoDB นั้นไม่ได้ใช้ PHP Data Object (PDO)
ตัวอย่างการเชื่อมต่อ
//...
try {
$mog['host'] = 'localhost';//database host
$mog['username'] = 'kongoon';//username ที่เชื่อมต่อฐานข้อมูล
$mog['password'] = 'password';//password สำหรับ username
$mog['database'] = 'php_tutorial';//ชื่อฐานข้อมูล
$con_mog = new MongoClient("mongodb://".$mog['username'].":".$mog['password']."@".$mog['host'].":27017/".$mog['database']."");
} catch (MongoConnectionException $e) {
echo $e->getMessage();
}
ตัวอย่างเมื่อเกิด Error ติดต่อฐานข้อมูลไม่ได้
Failed to connect to: localhost:27017: Authentication failed on database 'abcd' with username 'asdf': auth fails
การเชื่อมต่อไปยังฐานข้อมูล MicrosoftSQL Server
สำหรับการเชื่อมต่อ Microsoft SQL Server นั้นต้องติดตั้ง PHP Extension ที่มีชื่อว่า sqlsrv เพิ่มเติม ซึ่งใน Official ของ Microsoft นั้น มีเพียง 32bit
https://www.microsoft.com/en-us/download/details.aspx?id=20098
แต่หากต้องการใช้งานกับ PHP version 64bit ให้ดาวน์โหลด Extension ได้จาก UnOfficial site
https://onedrive.live.com/redir?resid=669EE24817961774%21720
Extension PHP ที่ใช้งาน
php_pdo_sqlsrv_55_ts.dll
ทดสอบ PDO sqlsrv ใน phpinfo();
ติดตั้ง 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
ตัวอย่างการเชื่อมต่อ
//...
try {
$mssql['host'] = 'localhost';//database host
$mssql['username'] = 'sa';//username ที่เชื่อมต่อฐานข้อมูล
$mssql['password'] = 'password';//password สำหรับ username
$mssql['database'] = 'php_tutorial';//ชื่อฐานข้อมูล
$con_sql = new PDO("sqlsrv:Server=".$mssql['host'].";Database=".$mssql['database'], $mssql['username'], $mssql['password']);
} catch (PDOException $e) {
echo $e->getMessage();
}
ตัวอย่างเมื่อเกิด Error
SQLSTATE[28000]: [Microsoft][SQL Server Native Client 11.0][SQL Server]Login failed for user 'sa'.
การเชื่อมต่อไปยังฐานข้อมูล 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 PHP ที่ใช้งาน
php_pdo_oci.dll
และทำการเปิดการใช้งาน Extension ให้เรียบร้อย ตรวจสอบ phpinfo() จะเห็นลักษณะดังนี้
ตัวอย่างการเชื่อมต่อ
//...
try {
$oci['host'] = '127.0.0.1';//database host
$oci['username'] = 'system';//username ที่เชื่อมต่อฐานข้อมูล
$oci['password'] = 'password';//password สำหรับ username
$oci['database'] = 'php_tutorial';//ชื่อฐานข้อมูล
$con_oci = new PDO("oci:host=//".$oci['host'].":port=1521/".$oci['database'].";charset=UTF8",$oci['username'], $oci['password']);
} catch (PDOException $e) {
echo $e->getMessage();
}
ความคิดเห็น