php với oracle database

15
1 MC LC 1.CÁC BƯỚC CƠ BẢN ĐỂ PHÁT TRIỂN NG DNG NỀN WEB PHP TRÊN ORACLE DATABASE........................................................................................................................... 2 1.1.Các bước cài đặt để sdng PHP vi ORACLE DATABASE ..................................... 2 1.1.1.Tìm hiểu vOCI8 Extension ................................................................................. 2 1.1.2.Cài đặt PHP với OCI8 trên Windows ..................................................................... 3 1.1.3.Cài đặt thông qua gói phần mềm WampServer trên Windows............................... 4 1.2.Cách kết nối PHP và thực hin truy vn SQL tPHP trên Oracle database ................ 6 1.2.1.Cách kết ni PHP vi Oracle database sdng OCI8 .......................................... 6 1.2.2.Cách thực hin truy vn SQL tPHP trên Oracle database: ................................. 8 2.CÁC YÊU CẦU VBO MẬT, AN TOÀN DỮ LI U ......................................................... 10 2.1.Bo mật và an toàn ngay trên Oracle database: ........................................................ 10 2.2.Kiểm soát chặt chdliu nhập vào ......................................................................... 10 3.CHƯƠNG TRÌNH ỨNG DNG THC T....................................................................... 11 TÀI LIỆU THAM KHO ....................................................................................................... 15

description

 

Transcript of php với oracle database

Page 1: php với oracle database

1

MỤC LỤC 1.CÁC BƯỚC CƠ BẢN ĐỂ PHÁT TRIỂN ỨNG DỤNG NỀN WEB PHP TRÊN ORACLE

DATABASE ........................................................................................................................... 2

1.1.Các bước cài đặt để sử dụng PHP với ORACLE DATABASE ..................................... 2

1.1.1.Tìm hiểu về OCI8 Extension ................................................................................. 2

1.1.2.Cài đặt PHP với OCI8 trên Windows ..................................................................... 3

1.1.3.Cài đặt thông qua gói phần mềm WampServer trên Windows............................... 4

1.2.Cách kết nối PHP và thực hiện truy vấn SQL từ PHP trên Oracle database ................ 6

1.2.1.Cách kết nối PHP với Oracle database sử dụng OCI8 .......................................... 6

1.2.2.Cách thực hiện truy vấn SQL từ PHP trên Oracle database: ................................. 8

2.CÁC YÊU CẦU VỀ BẢO MẬT, AN TOÀN DỮ LIỆU ......................................................... 10

2.1.Bảo mật và an toàn ngay trên Oracle database: ........................................................ 10

2.2.Kiểm soát chặt chẽ dữ liệu nhập vào ......................................................................... 10

3.CHƯƠNG TRÌNH ỨNG DỤNG THỰC TẾ ....................................................................... 11

TÀI LIỆU THAM KHẢO ....................................................................................................... 15

Page 2: php với oracle database

2

1.CÁC BƯỚC CƠ BẢN ĐỂ PHÁT TRIỂN ỨNG DỤNG NỀN

WEB PHP TRÊN ORACLE DATABASE

1.1.Các bước cài đặt để sử dụng PHP với ORACLE DATABASE

1.1.1.Tìm hiểu về OCI8 Extension

OCI8 Extension là 1 lớp thư viện mở rộng được chính Oracle phát triển, giúp PHP kết

nôi,giao tiếp và thực thi các truy vấn SQL dễ dàng với ORACLE DATABASE, nó được thêm

vào trong nhiều gói PHP khác nhau, bao gồm 3 gói chính:

Dành cho gói PHP được phát hành chính thức tại website:PHP.NET

Dành cho nhân của ZEND FRAMEWORK

Dành cho cộng đồng phát triển thư viện mã nguồn mở PHP (PECL)

Sơ đồ liên kết giữa PHP với thư viện Oracle client

Tất cả các tính năng trong OCI8 có thể không được thể hiện hết trừ khi các thư viện client

và máy chủ cơ sở dữ liệu Oracle được nâng cấp lên phiên bản mới nhất

Bảng sau sẽ chỉ rõ sự tương thích của các thư viện Oracle client với các phiên bản PHP với

OCI8 Extension

Page 3: php với oracle database

3

Gói phần mềm Phiên bản PHP Phiên bản OCI8 Các thư viện Orale client tương thích với OCI8

Mã nguồn PHP phát hành chính thức

5.2.7 OCI8 1.2.5 8i, 9i, 10g, 11g

Gói PHP phát hành chính thức được đóng gói cho Windows

5.2.7 OCI8 1.2.5 10g, 11g

Mã nguồn PECL OCI8

4.3.9 OCI8 1.3.4 9iR2, 10g, 11g

Zend Core 2.5 5.2.5 OCI8 1.2.3 10g

1.1.2.Cài đặt PHP với OCI8 trên Windows

Để cài đặt OCI8 trên Windows, thì ta cần phải cài đặt Oracle phiên bản 10g hay 11g

i. Cài đặt OCI8 sử dụng 1 cơ sở dữ liệu địa phương trên Windows(hay Oracle databse

được cài đặt trên cùng 1 máy chứa Web Server và PHP)

1. Tải gói cài đặt PHP 5.2.7 từ Website: http://www.php.net/downloads.php

2. Nhấn chuột 2 lần vào file php-5.2.7-win32-installer.msi vừa được tải về

3. Nhấn Next ở trên hộp thoại Welcome

4. Tích chuột vào ô checkbox để đồng ý và nhất Next

5. Lựa chọn thư mục để cài đặt các file PHP và nhấn Next

6. ở hộp thoại cài đặt Web Server, lựa chọn Apache 2.0.x Module và nhấn Next

7. trong hộp thoại cấu hình thư mục Apache, lựa chọn vị trí của thư mục conf và

nhấn Next.với Apache 2.x, cấu hình thư mục tiêu chuẩn thường là C:\Program

Files\ApacheGroup\Apache2\conf\

8. trong hộp thoại lựa chọn thành phần để cài đặt, xoay chuột xuống phía dưới tới

phần Extensions rồi thêm Oracle 8 extension vào để cài đặt và nhấn Next

9. nhấn Install

10. 1 hộp thoại sẽ được hiện ra hỏi xem có muốn cấu hình Apache hay không?chọn

Yes

11. 1 thông báo xác nhận được hiện ra để xác nhận file httpd.conf đã được cập nhật,

nhấn OK

12. 1 thông báo xác nhận được hiện ra để xác nhận file mime.types đã được cập

nhật, nhấn OK

13. 1 thông báo xác nhận cuối cùng hiện ra xác nhận việc cài đặt PHP đã hoàn tất,

nhấn Finish

14. Khởi động lại Apache bằng: Start > Programs > Apache HTTP Server 2.0.59 >

Control Apache Server > Restart.

ii. Cài đặt OCI8 với Instant Client trên Windows(hay Oracle database được cài đặt trên

một máy khác không chứa Web Server và PHP, khi này Oracle database là 1 cơ sở

dữ liệu được điều khiển từ xa)

1. Tải gói Instant Client Basic cho Windows từ trang:

http://www.oracle.com/technology/tech/oci/instantclient/instantclient.html

Page 4: php với oracle database

4

file nén Zip cho Windows 32 bit thường có dạng instantclient-basic-win32-

11.1.0.6.0.zip có dung lượng khoảng 42 MB

2. Tạo 1 thư mục mới (ví dụ như: C:\instantclient_11_1).sau đó giải nén file vừa tải

về vào thư mục vừa tạo này

3. Chỉnh sửa trong Windows environment và thêm vào vị trí của các file Oracle

Instant Client, C:\instantclient_11_1.ví dụ trên Windows XP: Start > Settings >

Control Panel > System > Advanced > Environment Variables và chỉnh sửa

đường dẫn trong System Variables list.nếu ta đang sử dụng 1 file tnsnames.ora

để xác định tên kết nối tới Oracle Net, ta sao chép file tnsnames.ora vào thư mục

C:\instantclient_11_1 , và thiết lập TNS_ADMIN trong user environment variable

thành C:\instantclient_11_1

4. Cài đặt PHP theo các bước như trên

5. Khởi động lại Apache HTTP Server.

1.1.3.Cài đặt thông qua gói phần mềm WampServer trên Windows

WampServer là 1 gói phần mềm đã bao gồm các cài đặt sẵn : Apache, PHP, MySql đã

được cấu hình sẵn để liên kết với nhau nhằm giảm thiểu và hỗ trợ tối đa cho lập trình viên

trong việc thiết lập cài đặt bằng tay trong từng gói riêng lẻ để chúng có sự tương thích và

đồng bộ với nhau.việc cài đặt WampServer là khá dễ dàng chỉ cần thông qua vài cái nhấn

chuột đơn giản.các bước cài đặt:

1. Tải miễn phí gói phần mềm ở trang http://www.wampserver.com/ .tải phiên bản

mới nhất hiện thời là phiên bản 2.2a (bao gồm các gói cài đặt sẵn: Apache 2.2,

PHP 5.3.8, MySql 5.5).file tải về có tên là: WampServer2.2a-x32.exe

2. Nhấn chuột 2 lần vào file đã tải về

3. Hộp thoại Welcome hiên ra, nhấn Next

4. Tích chuột vào ô checkbox để đồng ý, rồi ấn Next

5. Lựa chọn thư mục cài đặt, rồi ấn Next

6. Tiếp tục nhấn Next

7. Nhấn Install

8. Đợi đến khi các file đã cài đặt xong, ta chọn Finish

9. Khởi động WampServer bằng việc nhấn chuột vào biểu tượng WampServer

ngoài màn hình Destop

10. ấn chuột trái vào biểu tượng WampServer trên thanh taskbar chọn PHP > PHP

Extensions > php_oci8_11g (hoặc php_oci8)

Page 5: php với oracle database

5

Lựa chọn tới PHP > PHP extensions

Lựa chọn php_oci8_11g(hoặc php_oci8) trong PHP extensions

11. đợi WampServer tự động khởi động lại

Page 6: php với oracle database

6

1.2.Cách kết nối PHP và thực hiện truy vấn SQL từ PHP trên Oracle

database

1.2.1.Cách kết nối PHP với Oracle database sử dụng OCI8

Ta sử dụng chuỗi thông tin kết nối có chứa trong file tnsnames.ora của Oracle.file này

được tìm thấy trong thư mục dbhome_1\NETWORK\ADMIN\tnsnames.ora

Ví dụ thông tin trong file tnsnames.ora là :

# tnsnames.ora Network Configuration File:

D:\app\ngoquangtrung\product\11.2.0\dbhome_1\network\admin\tnsnames.ora

# Generated by Oracle configuration tools.

LISTENER_ORCL =

(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))

ORACLR_CONNECTION_DATA =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

)

(CONNECT_DATA =

(SID = CLRExtProc)

(PRESENTATION = RO)

)

)

ORCL =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = orcl.168.1.10)

)

)

Page 7: php với oracle database

7

Ta chú ý tới chuỗi kí tự cuối cùng ở trong file:

Trong PHP, ta tạo 1 file config.php nhằm tạo kết nối từ PHP tới Oracle như sau:

ở trên ta sử dụng tên của kết nối: ORCL để truy cập.hơn thế ta cũng thế sử dụng chuỗi mô

tả kết nối để truy cập:

ORCL =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = orcl.168.1.10)

)

<?php

$user='scott';

$pass='tiger';

$link=oci_connect($user,$pass,'ORCL');

if(!$link){

$error=oci_error();

echo $error['message'];

exit();

}

?>

Page 8: php với oracle database

8

oci_connect() : hàm dùng để kết nối tới 1 Oracle database, nó trả về 1 kết nối đã được xác

minh cần cho các thao tác xử lý OCI8 khác

oci_error() : trả về lỗi dưới dạng 1 mảng kết hợp khi xảy ra lỗi

để đóng 1 kết nối tới Oracle database ta sử dụng hàm oci_close()

1.2.2.Cách thực hiện truy vấn SQL từ PHP trên Oracle database:

<?php

$user='scott';

$pass='tiger';

$db='(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = orcl.168.1.10)

)

)';

$link=oci_connect($user,$pass,$db);

if(!$link){

$error=oci_error();

echo $error['message'];

exit();

}

?>

Page 9: php với oracle database

9

oci_parse() : là hàm phân tích ngữ pháp cấu trúc lệnh để chuẩn bị xử lý trên Oracle

database

oci_execute() : là hàm thực thi cấu trúc đã được oci_parse() phân tích

oci_fetch_row() : trả về kết quả phản hồi của câu truy vấn dưới dạng mảng array có chỉ

mục là dạng số.mỗi phần tử trong mảng tương ứng với giá trị của 1 cột trong mỗi dòng kết

quả trả về của câu truy vấn

<?php

$sql='select * from "dssv"';

$result=oci_parse($link,$sql);

oci_execute($result);

while($row=oci_fetch_row($result)){

$msv=$row[0];

$hovaten=$row[1];

$namhoc=$row[2];

$kyhoc=$row[3];

$khoahoc=$row[4];

$phonghoc=$row[9];

$giangvien=$row[11];

$khoavien=$row[10];

$thoigianhoc=$row[5].':'.$row[6].'-'.$row[7].':'.$row[8];

}

?>

Page 10: php với oracle database

10

2.CÁC YÊU CẦU VỀ BẢO MẬT, AN TOÀN DỮ LIỆU

2.1.Bảo mật và an toàn ngay trên Oracle database:

Kiểm soát truy cập: Mỗi người dùng không thể truy cập vào mọi dữ liệu.

Xác thực người dùng: Để kiểm soát truy cập trên dữ liệu nhạy cảm đầu tiên hệ quản

trị phải biết được ai đang cố gắng truy cập vào CSDL.

Phát hiện hành động đáng nghi: Chính người dùng thi thoảng cũng có các hành

động đáng nghi, ví dụ: Bỗng nhiên người quản trị hỏi một lượng lớn thông tin về

CSDL... Oracle cung cấp tập các công cụ để kiểm soát các hành động của người

dùng.

Thực thi nguyên tắc tối thiểu đặc quyền:

Việc tối thiểu đặc quyền là một người dùng chỉ có một số quyền đủ để hoàn thành

công việc của họ, việc này tránh cho họ vô tình hay cố ý sử dụng các quyền để truy

nhập hay sửa đổi CSDL.và việc thực thi này bao gồm:

Bảo vệ các dữ liệu từ điển

Thu lại các quyền không cần thiết của PUBLIC

Giới hạn các thư mục được truy cập của người dùng

Giới hạn người dùng với các quyền quản trị

Hạn chế xác thực CSDL từ xa

2.2.Kiểm soát chặt chẽ dữ liệu nhập vào

Để phòng tránh các nguy cơ bị khai thác lỗi SQL injection, để bảo vệ các câu lệnh SQL ta

cần kiểm soát chặt chẽ tất cả các dữ liệu nhập nhận được từ đối tượng Request ($_GET,

$_POST, $_SERVER, AJAX )

Cách vá lỗi:

1. Mởi php.ini và thiết lập magic_quotes_gpc thành On

Nó sẽ chèn “\” trước (’) có trong:

-COOKIE

-POST

-GET

2. Sử dụng hàm addslashes() để “gói” chuỗi bằng dấu “/”

3. Sử dụng hàm htmlspecialchars(), mysql_escape_string() … để mã hoá kí tự đặc biệt

trong câu truy vấn

4. Sử dụng hàm oci_bind_by_name() ngăn cản sự tấn công bằng SQL injection, nó ràng

buộc liên kết biến trong PHP với biến trong Oracle, vì vậy biến ràng buộc này không được

hiểu là 1 phần của cấu trúc SQL, nên nó không cần phải trích dẫn lại hay bị thoát truy vấn

Page 11: php với oracle database

11

5. Ép kiểu:

- Ví dụ: Ta biết id của một đối tượng (user, category, box, product …) luôn là kiểu số

nguyên, vì vậy ta dùng:

$id = (int)$_POST['id'];

hoặc

$id = (int)$_GET['id'];

Giải thích về vá lỗi :

3 cách đầu: Nếu nhập vào abc’ đi , thì nó sẽ hiểu là một chuỗi chứ không phải là abc rồi dấu

‘ riêng

Cách thứ 5: là nếu nhập chuỗi thì nó ép thành số tương ứng.

3.CHƯƠNG TRÌNH ỨNG DỤNG THỰC TẾ

Để chạy được chường trình ta phải tiến hành các bước cài đặt như đã nói ở trên và thực

hiện kích hoạt scott/tiger schemas rồi import cơ sở dữ liệu có sẵn vào trong Oracle

database

Mô tả chương trình ứng dụng:

Ứng dụng gồm 2 Forms:

- Form01: Chứa 1 Data Grid 1 bộ lọc. Data Grid hiển thị đầy đủ các trường thông tin: Mã

sinh viên, Họ tên sinh viên, Năm học, Kỳ học, Khóa học, Thời gian học, Phòng học, Giảng

viên, Khoa viện. Bộ lọc hỗ trợ lọc theo các trường: Mã sinh viên, Họ tên sinh viên, Năm học,

Kỳ học, Khóa học. Thực hiện các chức năng xem, thêm, xóa, sửa đối với từng sinh viên,

thao tác trên Form 02 dưới đây.

- Form02: Chứa các thông tin về Mã sinh viên, Họ tên sinh viên, Năm học, Kỳ học, Khóa

học, Thời gian học, Phòng học, Giảng viên, Khoa viện của từng sinh viên. Cài đặt mối liên

kết dữ liệu trên giao diện: chẳng hạn chọn khoa viện thì lọc được danh sách sinh viên thuộc

khoa viện, chọn khóa học thì lọc được danh sách giảng viên có thể dạy khóa học đó. Thực

hiện cập nhật dữ liệu trên giao diện và lưu vào cơ sở dữ liệu.

Giao diện chương trình:

FORM01

Page 12: php với oracle database

12

Giao diện tổng quan FORM01

Khi tiến hành lọc dữ liệu ở trường họ và tên bắt đầu bằng “ZH”

FORM02

Page 13: php với oracle database

13

Giao diện tổng quan FORM02

Kết quả lọc dữ liệu theo năm học : 2002; kỳ học: FALL; khóa học: DRAMA; phòng

học: 808

Thêm mới dữ liệu

Page 14: php với oracle database

14

Chỉnh sửa dữ liệu

Page 15: php với oracle database

15

TÀI LIỆU THAM KHẢO

“The Underground PHP and Oracle Manual”, CHRISTOPHER JONES AND ALISON HOLLOWAY

“PHP Manual”, THE PHP DOCUMENTATION GROUP

“PHP Oracle Web Development Data Processing, Security, Caching, XML, Web

Services, and AJAX”, YULI VASILIEV