ข้ามไปยังเนื้อหาหลัก
ProgrammerThailand

PHP Data Object (PDO)

การติดต่อฐานข้อมูล MySQL, Microsoft SQL, PosgreSQL, MongoDB และ Oracle ด้วย PHP Data Object (PDO)

การติดต่อฐานข้อมูล MySQL, Microsoft SQL, PosgreSQL, MongoDB และ Oracle ด้วย PHP Data Object (PDO)

ในบทเรียนรู้นี้มาทำความเข้าใจการติดต่อฐานข้อมูลด้วย PHP Data Object หรือ PDO โดยที่ PDO นั้นสามารถติดต่อฐานข้อมูลได้หลากหลายฐานข้อมูล เช่น MySQL, Microsoft SQL, SQLite, PosgreSQL, MongoDB หรือแม้แต่ Oracle ก็ได้เช่นกัน ในบทเรียนรู้นี้มาลองทำการติดต่อฐานข้อมูลต่างๆ กัน

 

ดูความนิยมของ Database Engine

การติดต่อฐานข้อมูล MySQL, Microsoft SQL, PosgreSQL, MongoDB และ Oracle ด้วย PHP Data Object (PDO)

ดูเพิ่มเติมได้ที่ 

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

การติดต่อฐานข้อมูล MySQL, Microsoft SQL, PosgreSQL, MongoDB และ Oracle ด้วย PHP Data Object (PDO)

หมายเหตุ การเชื่อมต่อไปยังฐานข้อมูล 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();

การติดต่อฐานข้อมูล MySQL, Microsoft SQL, PosgreSQL, MongoDB และ Oracle ด้วย PHP Data Object (PDO)

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

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


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

การติดต่อฐานข้อมูล MySQL, Microsoft SQL, PosgreSQL, MongoDB และ Oracle ด้วย PHP Data Object (PDO)

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

การติดต่อฐานข้อมูล MySQL, Microsoft SQL, PosgreSQL, MongoDB และ Oracle ด้วย PHP Data Object (PDO)

 

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

//...
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() จะเห็นลักษณะดังนี้

การติดต่อฐานข้อมูล MySQL, Microsoft SQL, PosgreSQL, MongoDB และ Oracle ด้วย PHP Data Object (PDO)

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

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

 

ติดปัญหาตอนทำตาม? ถามในชุมชน

ความคิดเห็น (0)

ยังไม่มีความคิดเห็น — เริ่มคุยเป็นคนแรก ถามสิ่งที่สงสัย หรือแชร์ประสบการณ์ของคุณ