หน้าเว็บ

วันศุกร์ที่ 30 กรกฎาคม พ.ศ. 2553

วิธีเขียน PHP เรียกข้อมูลจาก MS Access .mdb บน Ubuntu

การเรียกดูข้อมูลจาก MS Access บน Ubuntu โดยใช้ PHP นั้นสามารถทำได้โดยเรียกผ่าน ODBC (ย่อจาก Open Database Connectivity ซึ่งเป็น API ใช้สำหรับการเชื่อมต่อกับฐานข้อมูลใดๆ โดย ODBC จะทำหน้าที่เป็น Layer กลางแปลงคำสั่ง odbc ไปเป็นคำสั่งของฐานข้อมูลนั้นๆให้)

1. ก่อนอื่นเตรียมอุปกรณ์กันก่อน ดังต่อไปนี้
sudo apt-get install php5-odbc libmdbodbc mdbtools unixodbc-bin

2. หลังจากนั้นทำการสร้าง DSN (Data Source Name) เพื่อให้ ODBC ทำการเชื่อมต่อ
ในขั้นตอนนี้จะเกี่ยวข้องด้วย 2 ไฟล์ด้วยกันคือ
2.1 ไฟล์ /etc/odbcinst.ini ซึ่งเป็นไฟล์ที่ใช้ในการกำหนด Driver ในการเชื่อมต่อ บางกรณีไฟล์นี้อาจถูกเขียนไว้แล้ว แต่ถ้ายังไม่มีหรือมีแล้วแต่ไม่ใช่ Driver ตัวเดียวกันก็ให้เพิ่มเข้าไปดังนี้ (อย่าลืม sudo ด้วย เดี่ยว save ไม่ได้)
[mdbtoolsodbc]
Description = MDB Tools odbc drivers
Driver = /usr/lib/libmdbodbc.so.0
Setup =
FileUsage = 1
CPTimeout =
CPReuse =
UsageCount = 1

- ตรง [mdbtoolsodbc] เป็นชื่อ driver ของเรา ใส่เป็นอะไรก็ได้แต่ห้ามมีเว้นวรรค ไว้ใช้สำหรับการอ้างถึงจากไฟล์อื่น
- ตรง Description ใส่อะไรก็ได้ เป็นแค่คำบรรยายให้เราเข้าใจทีหลังเวลากลับมาอ่าน
- ตรง Driver ลองตรวจสอบดูว่าไฟล์อยู่ที่ /usr/lib หรือไม่ ถ้าไม่อยู่ให้เปลี่ยน path ให้ตรงกับที่อยู่จริง

ขั้นตอนนี้จะเป็นการกำหนด ODBC Driver ให้เป็น mdbtools ซึ่งใช้สำหรับการเชื่อมต่อกับไฟล์ MS Access (.mdb) พอเสร็จแล้ว save และไปขั้นตอนถัดไป

2.2 ไฟล์ /etc/odbc.ini ไฟล์นี้จะเป็นตัวกำหนดการเชื่อมต่อไปยังฐานข้อมูลของเราให้เพิ่มรายละเอียดดังนี้
[TestDatabase]
Description = Miscrosoft Access Database of TestDatabase
Driver = mdbtoolsodbc
Database = /home/supasate/desktop/testdatabase.mdb
Servername = localhost
UserName =
Password =
port = 5432

- ตรง [TestDatabase] เป็นชื่อฐานข้อมูลที่ใช้ในการเชื่อมต่อ ซึ่งตั้งเป็นอะไรก็ได้ ไว้ใช้อ้างถึงจากที่อื่น (ตั้งให้คล้ายกับชื่อไฟล์ .mdb ก็ดี)
- ตรง Description เช่นเดิมเป็นอะไรก็ได้
- ตรง Driver อ้างอิงชื่อ driver ที่เราสร้างไว้ที่ไฟล์ odbcinst.ini ดังนั้นเขียนให้เหมือนกัน
- ตรง Database ให้ใส่ path ไปยังไฟล์ MS Access (.mdb) ที่เราต้องการเรียกข้อมูล
- ส่วนที่เหลือจริงๆไม่ต้องพิมพ์ก็ได้ แต่เขียนให้ดูเป็นตัวอย่างเผื่อเอาไปใช้กับฐานข้อมูลแบบอื่นที่เป็นแบบ server และมีการยืนยันตัวตน

เท่านี้เราก็พร้อมที่เชื่อมต่อกันแล้ว

3. เขียน PHP เพื่อทำการเชื่อมต่อ ดังตัวอย่างข้างล่าง ผมเขียนไว้ในไฟล์ test.php
if (!($conn = odbc_connect("TestDatabase", "", ""))) {
echo "Connection Falied.";
} else {
echo "Connection Success.";
$query = "SELECT ID, FirstName, LastName From EMPLOYEE";
$result = odbc_exec($conn, $query);
while ($row = odbc_fetch_array($result)) {
print $row['ID'].' '.$row['FirstName'].' '.$row['LastName'].'
';
}

- odbc_connect("ชื่อ db ที่เรากำหนดไว้ในไฟล์ odbc.ini", "username", "password")
- $query ใส่คิวรีที่ต้องการ ในที่นี้คือจะดึง field ID, FirstName, LastName มาจากตาราง EMPLOYEE
- odbc_exe(คอนเน็คชันที่สร้างขึ้น, คิวรีสตริง)
- odbc_fetch_array ดึงข้อมูลมาทีละแถว

ในกรณีที่อยากรู้ว่าฐานข้อมูลเรามีตารางอะไรและ Field อะไรบ้างนั้นให้ใช้ตัว GNOME MDB Viewer ในการดู

ลองทดลองบน Command line ดูก่อน โดยสั่ง
php test.php
ถ้าไม่สำเร็จลองตรวจสอบชื่อ Driver ชื่อ ODBC และ Path ไปยังฐานข้อมูลว่าถูกต้องหรือไม่
ถ้าสำเร็จก็ลองไป run บน server ดู โดยถ้าบน server ไม่สำเร็จอาจเกิดจาก SELinux หรือ Firewall ในกรณีที่ต้องมีการเชื่อมต่อ port

ขอให้โชคดีครับ

ระบบที่ทดสอบ
OS: Ubuntu 10.04

อ้างอิง
http://ubuntuforums.org/showthread.php?t=678690
http://www.infoqu.com/dev/database-management/access-msaccess-via-odbc-from-linux-php-228635-1/

1 ความคิดเห็น:

Unknown กล่าวว่า...

ทำไมลง libmdbodbc ไม่ได้ครับ