ในบทเรียนรู้นี้มาทำความเข้าใจการติดต่อฐานข้อมูลด้วย 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 และเรียงลำดับดังนี้

  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

 

ตัวอย่างการเชื่อมต่อ

//...
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();
}

 

ความคิดเห็น

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