Tôi có tiêu chuẩn Windows Server 2008 R 2 với WampServer2.5-Apache-2.4.9-Mysql-5.6.17-php5.5.12-64b. Tôi đã làm theo các hướng dẫn được cung cấp bởi Oracle, tất nhiên bằng cách sử dụng WAMP Cài đặt: Bài viết Tôi đã sử dụng phiên bản khách hàng tức thời của Oracle: InstantClient-Basic-NT-11.2.0.4.0instantclient-basic-nt-11.2.0.4.0 Vấn đề là, khi tôi kích hoạt các dòng này trong httpd.conf, bất kỳ tệp PHP nào có tên là cho lỗi "bị cấm, bạn không có quyền truy cập /path /file.php trên máy chủ này.":httpd.conf, any php file called gives error "Forbidden You don't have permission to access /path/file.php on this server.": FcgidInitialEnv PHPRC "C:/new_wamp/bin/php/php5.5.12/"
AddHandler fcgid-script .php
FcgidWrapper "C:/wamp/bin/php/php5.5.12/php-cgi.exe" .php
Ngoài ra có lỗi trong nhật ký lỗi PHP: CẢNH BÁO PHP: Php Startup: Không thể tải Thư viện động 'C: /wamp/bin/php/php5.5.12/ext \ php_oci8_11g.dll' - %1 không phải là ứng dụng Win32 hợp lệ. không rõ trên dòng 0'C:/wamp/bin/php/php5.5.12/ext\php_oci8_11g.dll' - %1 is not a valid Win32 application. in Unknown on line 0
Nhưng InstantClient là phiên bản 32 bit. Theo như tôi đã tìm ra từ các cài đặt trước đó, hầu hết là vấn đề là trong 64 bit InstantClient?instantclient is 32bit version. As far as i have
found out from previous installations, mostly problem is in 64bit instantclient? Bất kỳ lời khuyên? Thanks! <Do not delete this text because it is a placeholder for the generated list of "main" topics when run in a browser> Mục đíchHướng dẫn này chỉ cho bạn cách sử dụng PHP với cơ sở dữ liệu Oracle 11g. Thời gian để hoàn thànhKhoảng 2 giờ Tổng quanPHP là ngôn ngữ tập lệnh web phổ biến và thường được sử dụng để tạo các trang web dựa trên cơ sở dữ liệu. Hướng dẫn này giúp bạn bắt đầu với cơ sở dữ liệu PHP và Oracle bằng cách chỉ ra cách xây dựng một ứng dụng web và bằng cách cung cấp các kỹ thuật để sử dụng PHP với Oracle. Nếu bạn chưa quen với PHP, hãy xem lại Phụ lục: Php Primer để có được sự hiểu biết về ngôn ngữ PHP. Điều kiện tiên quyếtTrước khi bắt đầu lời tiên tri này, xin vui lòng hoàn thành các điều kiện tiên quyết sau:
. | Cài đặt Cơ sở dữ liệu Oracle 11.2
|
---|
. | Cài đặt Cơ sở dữ liệu Oracle 11.2 Bắt đầu gộp kết nối DRCP: |
---|
. | Cài đặt Cơ sở dữ liệu Oracle 11.2 HR schema and make the following changes: Bắt đầu gộp kết nối DRCP: |
---|
. | Cài đặt Cơ sở dữ liệu Oracle 11.2
|
---|
. | Cài đặt Cơ sở dữ liệu Oracle 11.2 Bắt đầu gộp kết nối DRCP: |
---|
. | Cài đặt Cơ sở dữ liệu Oracle 11.2
|
---|
Bắt đầu gộp kết nối DRCP:sqlplus / as sysdba
execute dbms_connection_pool.start_pool();
execute dbms_connection_pool.restore_defaults(); Tạo người dùng có tên PHPHOL bằng mật khẩu 'Chào mừng'. Cài đặt lược đồ nhân sự mẫu của Oracle và thực hiện các thay đổi sau: create sequence emp_id_seq start with 400;
create trigger my_emp_id_trigger
before insert on employees for each row
begin
select emp_id_seq.nextval into :new.employee_id from dual;
end;
/
--
-- Also to simplify the example we remove this trigger otherwise
-- records can only be updated once without violating the
-- PYTHONHOL.JHIST_EMP_ID_ST_DATE_PK constraint
--
drop trigger update_job_history;
--
-- Allow employees to be changed when testing the lab after hours.
--
drop trigger secure_employees;
. | Cài đặt Cơ sở dữ liệu Oracle 11.2$HOME/public_html/connect.php <?php
// Create connection to Oracle
$conn = oci_connect("phphol", "welcome", "//localhost/orcl");
if (!$conn) {
$m = oci_error();
echo $m['message'], "\n";
exit;
}
else {
print "Connected to Oracle!";
}
// Close the Oracle connection
oci_close($conn);
?> Bắt đầu gộp kết nối DRCP:oci_connect() function contains the username, the password and the connection string. In this case, Oracle's Easy Connect connection string syntax is used. It consists of the hostname and the DB service name. sqlplus / as sysdba
execute dbms_connection_pool.start_pool();
execute dbms_connection_pool.restore_defaults(); oci_close() function closes the connection. Any standard connections not explicitly closed will be automatically released when the script ends.
|
---|
. | Cài đặt Cơ sở dữ liệu Oracle 11.2 http://localhost/~phphol/connect.php Bắt đầu gộp kết nối DRCP:
|
---|
. | Cài đặt Cơ sở dữ liệu Oracle 11.2$HOME/public_html/usersess.sql column username format a30
column logon_time format a18
set pagesize 1000 feedback off echo on
select username, to_char(logon_time, 'DD-MON-YY HH:MI:SS') logon_time
from v$session
where username is not null;
exit
Bắt đầu gộp kết nối DRCP: This SQL*Plus script shows the current database sessions, and what time they logged into the database.
|
---|
. | Cài đặt Cơ sở dữ liệu Oracle 11.2 cd $HOME/public_html
sqlplus -l phphol/welcome @usersess.sql Bắt đầu gộp kết nối DRCP:oci_connect()
function has been closed.
|
---|
. | Chỉnh sửa $ home/public_html/Connect.php và thay đổi oci_connect () để sử dụng kết nối liên tục oci_pconnect ().$HOME/public_html/connect.php and change oci_connect() to use a persistent connection oci_pconnect(). $ Conn = OCI_PConnect ("Phphol", "Chào mừng", "// LocalHost/Orcl"); Tải lại tập lệnh Connect.php trong trình duyệt. Bây giờ Rerurn Usersess.sql trong SQL*Plus.connect.php script in the browser. Now rerurn usersess.sql in SQL*Plus. cd $HOME/public_html
sqlplus -l phphol/welcome @usersess.sql Cần có hai người dùng được kết nối. Bạn có thể thấy nhiều hơn hai nếu bạn tải lại trang nhiều lần và Apache đã phân bổ các quy trình khác nhau để xử lý tập lệnh PHP. Theo mặc định, các kết nối liên tục vẫn mở cho đến khi quá trình Apache chấm dứt. Các tập lệnh PHP tiếp theo có thể sử dụng lại kết nối đã mở, khiến chúng chạy nhanh hơn.
|
---|
Sử dụng gộp kết nối thường trú cơ sở dữ liệuTập hợp kết nối thường trú cơ sở dữ liệu là một tính năng mới của cơ sở dữ liệu Oracle 11G. Nó rất hữu ích cho các tập lệnh sống ngắn như thường được sử dụng bởi các ứng dụng web. Nó cho phép số lượng kết nối được chia tỷ lệ khi việc sử dụng trang web tăng lên. Nó cho phép nhiều quy trình Apache trên nhiều máy để chia sẻ một nhóm nhỏ các quy trình máy chủ cơ sở dữ liệu. Không có DRCP, kết nối PHP không liên tục phải bắt đầu và chấm dứt quy trình máy chủ và kết nối PHP liên tục giữ các tài nguyên cơ sở dữ liệu ngay cả khi PHP không hoạt động. Bên dưới bên trái là sơ đồ của việc không phát sinh. Mỗi tập lệnh đều có các giao dịch máy chủ cơ sở dữ liệu riêng. Các tập lệnh không thực hiện bất kỳ công việc cơ sở dữ liệu nào vẫn giữ kết nối cho đến khi kết nối được đóng và máy chủ bị chấm dứt. Dưới đây là một sơ đồ với DRCP. Các tập lệnh có thể sử dụng các máy chủ cơ sở dữ liệu từ một nhóm máy chủ và trả lại chúng khi không còn cần thiết. Các tập lệnh hàng loạt thực hiện các công việc chạy dài thường nên sử dụng các kết nối không có mặt. Phần này của hướng dẫn cho thấy cách DRCP có thể được sử dụng bởi các ứng dụng mới hoặc hiện có mà không cần viết hoặc thay đổi bất kỳ logic ứng dụng nào. Thực hiện các bước sau:
. | Kiểm tra xem PHP có Set OCI8.Connection_Class không. Mở cửa sổ đầu cuối và thực hiện lệnh sau:oci8.connection_class set. Open a terminal window and execute the following command: Php -r 'echo ini_get ("oci8.connection_class"), "\ n";'Lớp kết nối cho nhóm máy chủ cơ sở dữ liệu biết rằng các kết nối có liên quan. Thông tin phiên (như định dạng ngày mặc định) có thể được giữ lại giữa các cuộc gọi kết nối, mang lại lợi ích hiệu suất. Thông tin phiên sẽ bị loại bỏ nếu một máy chủ gộp sau đó được sử dụng lại bởi một ứng dụng khác với tên lớp kết nối riêng.
|
---|
. | Xem lại mã trong $ home/public_html/query_pooled.php$HOME/public_html/query_pooled.php <?php
$c = oci_pconnect("phphol", "welcome", "//localhost/orcl:pooled");
$s = oci_parse($c, 'select * from employees'); oci_execute($s); oci_fetch_all($s, $res); echo "<pre>\n";
var_dump($res);
echo "</pre>\n";
?>
So sánh mã này với mã trong $ home/public_html/query_nonpooled.php$HOME/public_html/query_nonpooled.php sqlplus / as sysdba
execute dbms_connection_pool.start_pool();
execute dbms_connection_pool.restore_defaults(); 0Sự khác biệt duy nhất là ": gộp" trong chuỗi kết nối Easy Connect trong query_pooled.php.:pooled" in the Easy Connect connection string in query_pooled.php.
|
---|
. | Để chạy các tập lệnh, công cụ Apache Benchmark được sử dụng. Lệnh này liên tục tải một trang web, đo lường hiệu suất của nó. Từ cửa sổ đầu cuối, thực hiện các mục sau: sqlplus / as sysdba
execute dbms_connection_pool.start_pool();
execute dbms_connection_pool.restore_defaults(); 1Lệnh trên gửi Apache 150 yêu cầu đồng thời cho tập lệnh, liên tục trong 30 giây.
|
---|
. | Bây giờ hãy nhìn vào số lượng kết nối cơ sở dữ liệu mở. Mở một cửa sổ đầu cuối khác, thực hiện các mục sau: sqlplus / as sysdba
execute dbms_connection_pool.start_pool();
execute dbms_connection_pool.restore_defaults(); 2Nhóm DRCP mặc định tối đa là 40. Bạn thấy tối đa 40 kết nối với tên người dùng PHPHOL, tùy thuộc vào số lượng quy trình Apache đã xử lý các yêu cầu 'AB'. Bạn cũng có thể cần thực hiện truy vấn trong khi 'AB' đang chạy để xem các máy chủ gộp hoạt động. Oracle quản lý nhóm DRCP, thu hẹp nó sau một thời gian chờ quy định.
|
---|
. | Bây giờ, bạn sẽ chạy cùng một lệnh ngoại trừ chạy tập lệnh không có mặt để so sánh sự khác biệt. Từ cửa sổ đầu cuối, thực hiện các mục sau: sqlplus / as sysdba
execute dbms_connection_pool.start_pool();
execute dbms_connection_pool.restore_defaults(); 3
|
---|
. | Bây giờ hãy nhìn vào số lượng kết nối cơ sở dữ liệu mở. Mở một cửa sổ đầu cuối khác, thực hiện các mục sau: sqlplus / as sysdba
execute dbms_connection_pool.start_pool();
execute dbms_connection_pool.restore_defaults(); 2Nhóm DRCP mặc định tối đa là 40. Bạn thấy tối đa 40 kết nối với tên người dùng PHPHOL, tùy thuộc vào số lượng quy trình Apache đã xử lý các yêu cầu 'AB'. Bạn cũng có thể cần thực hiện truy vấn trong khi 'AB' đang chạy để xem các máy chủ gộp hoạt động. Oracle quản lý nhóm DRCP, thu hẹp nó sau một thời gian chờ quy định. Bây giờ, bạn sẽ chạy cùng một lệnh ngoại trừ chạy tập lệnh không có mặt để so sánh sự khác biệt. Từ cửa sổ đầu cuối, thực hiện các mục sau:V$SESSION. Nhiều hàng hơn trước được trả lại. Các hàng với (TNS V1-V3)query_pooled.php a little slower than query_nonpooled.php. But the non-pooled script causes every single Apache process to open a separate connection to the database. For larger sites, or where memory is limited, the overall benefits of DRCP are significant.
|
---|
tương ứng với quá trình Apache đang chạy giữ kết nối cơ sở dữ liệu mở. Đối với PHP, Apache chạy ở chế độ đa quy trình, sinh sản con xử lý từng quy trình có thể xử lý một tập lệnh PHP. Tùy thuộc vào cách Apache phân bổ các quy trình này để xử lý các yêu cầu "AB", bạn có thể thấy một số lượng hàng khác nhau trong phiên V $.So sánh số lượng yêu cầu hoàn thành trong mỗi lần chạy. Bạn có thể muốn chạy từng tập lệnh một vài lần để làm nóng bộ nhớ cache.
1.
| Phân tích câu lệnh để thực hiện. the statement for execution.
| 2.
| Liên kết các giá trị dữ liệu (tùy chọn). data values (optional).
| 3.
| Thực thi câu lệnh. the statement.
| 4.
| Tìm nạp các kết quả từ cơ sở dữ liệu. the results from the database.
|
Để tạo một truy vấn đơn giản và hiển thị kết quả trong bảng HTML, hãy thực hiện các bước sau.
. | Xem lại mã trong $ home/public_html/query.php$HOME/public_html/query.php sqlplus / as sysdba
execute dbms_connection_pool.start_pool();
execute dbms_connection_pool.restore_defaults(); 5Hàm oci_parse () phân tích lại câu lệnh.oci_parse() function parses the statement. Hàm OCI_execute () thực thi câu lệnh phân tích cú pháp.oci_execute() function executes the parsed statement. Hàm OCI_Fetch_Array () truy xuất một hàng kết quả của truy vấn dưới dạng mảng kết hợp và bao gồm các null.oci_fetch_array()
function retrieves a row of results of the query as an associative array, and includes nulls. Hàm HTMLENTITY () thoát khỏi bất kỳ văn bản nào giống với các thẻ HTML để nó hiển thị chính xác trong trình duyệt.htmlentities() function escapes any text resembling HTML tags so it displays correctly in the browser.
|
---|
. | Xem lại mã trong $ home/public_html/query.php sqlplus / as sysdba
execute dbms_connection_pool.start_pool();
execute dbms_connection_pool.restore_defaults(); 6Hàm oci_parse () phân tích lại câu lệnh. Hàm OCI_execute () thực thi câu lệnh phân tích cú pháp.OCI_ASSOC parameter fetches the row as an associative arrary of column names and column data. Hàm OCI_Fetch_Array () truy xuất một hàng kết quả của truy vấn dưới dạng mảng kết hợp và bao gồm các null.OCI_NUM
parameter can be passed to oci_fetch_array() to fetch the row as a numeric array.
|
---|
Hàm HTMLENTITY () thoát khỏi bất kỳ văn bản nào giống với các thẻ HTML để nó hiển thị chính xác trong trình duyệt.Từ trình duyệt web của bạn, hãy nhập URL sau để hiển thị đầu ra: Bind variables improve code reusability, and can reduce the risk of SQL Injection attacks. Kết quả của truy vấn được hiển thị trong trình duyệt web.
. | Xem lại mã trong $ home/public_html/query.php$HOME/public_html/bind.php Hàm oci_parse () phân tích lại câu lệnh. |
---|
. | Xem lại mã trong $ home/public_html/query.php sqlplus / as sysdba
execute dbms_connection_pool.start_pool();
execute dbms_connection_pool.restore_defaults(); 8Hàm oci_parse () phân tích lại câu lệnh.$myeid variable is bound to the :eidbv bind variable so when the query is re-executed the new value of
$myeid is passed to the query. This allows you to execute the statement again, without reparsing it with the new value, and can improve performance of your code. Hàm OCI_execute () thực thi câu lệnh phân tích cú pháp.EMPLOYEE_ID column of the EMPLOYEES table, and edit bind.php to use IDs that exist in
the table.
|
---|
Hàm OCI_Fetch_Array () truy xuất một hàng kết quả của truy vấn dưới dạng mảng kết hợp và bao gồm các null.Hàm HTMLENTITY () thoát khỏi bất kỳ văn bản nào giống với các thẻ HTML để nó hiển thị chính xác trong trình duyệt. Từ trình duyệt web của bạn, hãy nhập URL sau để hiển thị đầu ra:oci_commit() and oci_rollback() functions used to control transactions. At the end of a PHP script, any uncommitted data is rolled back. Kết quả của truy vấn được hiển thị trong trình duyệt web. Tham số OCI_ASSOC tìm nạp hàng như một sự kết hợp của tên cột và dữ liệu cột.
. | Xem lại mã trong $ home/public_html/query.php sqlplus / as sysdba
execute dbms_connection_pool.start_pool();
execute dbms_connection_pool.restore_defaults(); 9
|
---|
. | Xem lại mã trong $ home/public_html/query.php$HOME/public_html/trans_rollback.php create sequence emp_id_seq start with 400;
create trigger my_emp_id_trigger
before insert on employees for each row
begin
select emp_id_seq.nextval into :new.employee_id from dual;
end;
/
--
-- Also to simplify the example we remove this trigger otherwise
-- records can only be updated once without violating the
-- PYTHONHOL.JHIST_EMP_ID_ST_DATE_PK constraint
--
drop trigger update_job_history;
--
-- Allow employees to be changed when testing the lab after hours.
--
drop trigger secure_employees; 0Hàm oci_parse () phân tích lại câu lệnh.OCI_DEFAULT parameter overrides the basic behavior of oci_execute().
|
---|
. | Xem lại mã trong $ home/public_html/query.php create sequence emp_id_seq start with 400;
create trigger my_emp_id_trigger
before insert on employees for each row
begin
select emp_id_seq.nextval into :new.employee_id from dual;
end;
/
--
-- Also to simplify the example we remove this trigger otherwise
-- records can only be updated once without violating the
-- PYTHONHOL.JHIST_EMP_ID_ST_DATE_PK constraint
--
drop trigger update_job_history;
--
-- Allow employees to be changed when testing the lab after hours.
--
drop trigger secure_employees; 1Hàm oci_parse () phân tích lại câu lệnh.
|
---|
. | Xem lại mã trong $ home/public_html/query.php create sequence emp_id_seq start with 400;
create trigger my_emp_id_trigger
before insert on employees for each row
begin
select emp_id_seq.nextval into :new.employee_id from dual;
end;
/
--
-- Also to simplify the example we remove this trigger otherwise
-- records can only be updated once without violating the
-- PYTHONHOL.JHIST_EMP_ID_ST_DATE_PK constraint
--
drop trigger update_job_history;
--
-- Allow employees to be changed when testing the lab after hours.
--
drop trigger secure_employees; 2
|
---|
. | Xem lại mã trong $ home/public_html/query.php$HOME/public_html/trans_autocommit.php create sequence emp_id_seq start with 400;
create trigger my_emp_id_trigger
before insert on employees for each row
begin
select emp_id_seq.nextval into :new.employee_id from dual;
end;
/
--
-- Also to simplify the example we remove this trigger otherwise
-- records can only be updated once without violating the
-- PYTHONHOL.JHIST_EMP_ID_ST_DATE_PK constraint
--
drop trigger update_job_history;
--
-- Allow employees to be changed when testing the lab after hours.
--
drop trigger secure_employees; 3Hàm oci_parse () phân tích lại câu lệnh.trans1.php in that there is no OCI_DEFAULT when the data is inserted. This means the new data is committed by the
oci_execute() call.
|
---|
. | Xem lại mã trong $ home/public_html/query.php create sequence emp_id_seq start with 400;
create trigger my_emp_id_trigger
before insert on employees for each row
begin
select emp_id_seq.nextval into :new.employee_id from dual;
end;
/
--
-- Also to simplify the example we remove this trigger otherwise
-- records can only be updated once without violating the
-- PYTHONHOL.JHIST_EMP_ID_ST_DATE_PK constraint
--
drop trigger update_job_history;
--
-- Allow employees to be changed when testing the lab after hours.
--
drop trigger secure_employees; 4Hàm oci_parse () phân tích lại câu lệnh.
|
---|
. | Xem lại mã trong $ home/public_html/query.php create sequence emp_id_seq start with 400;
create trigger my_emp_id_trigger
before insert on employees for each row
begin
select emp_id_seq.nextval into :new.employee_id from dual;
end;
/
--
-- Also to simplify the example we remove this trigger otherwise
-- records can only be updated once without violating the
-- PYTHONHOL.JHIST_EMP_ID_ST_DATE_PK constraint
--
drop trigger update_job_history;
--
-- Allow employees to be changed when testing the lab after hours.
--
drop trigger secure_employees; 2
Hàm oci_parse () phân tích lại câu lệnh.
|
---|
. | Xem lại mã trong $ home/public_html/query.php Hàm oci_parse () phân tích lại câu lệnh.$HOME/public_html/trans_time_autocommit.php Hàm OCI_execute () thực thi câu lệnh phân tích cú pháp. create sequence emp_id_seq start with 400;
create trigger my_emp_id_trigger
before insert on employees for each row
begin
select emp_id_seq.nextval into :new.employee_id from dual;
end;
/
--
-- Also to simplify the example we remove this trigger otherwise
-- records can only be updated once without violating the
-- PYTHONHOL.JHIST_EMP_ID_ST_DATE_PK constraint
--
drop trigger update_job_history;
--
-- Allow employees to be changed when testing the lab after hours.
--
drop trigger secure_employees; 6Hàm OCI_Fetch_Array () truy xuất một hàng kết quả của truy vấn dưới dạng mảng kết hợp và bao gồm các null.
Hàm HTMLENTITY () thoát khỏi bất kỳ văn bản nào giống với các thẻ HTML để nó hiển thị chính xác trong trình duyệt.trans_autocommit.php. Từ trình duyệt web của bạn, hãy nhập URL sau để hiển thị đầu ra: Your time
values may differ depending on the hardware resources you are using.
|
---|
. | Bây giờ xem lại tập lệnh trans_time_explicit.php. Sự khác biệt duy nhất trong tập lệnh này là trong hàm do_insert () OCI_Default đã được thêm vào để nó không tự động cam kết và một cam kết rõ ràng đã được thêm vào sau khi vòng chèn: trans_time_explicit.php script. The only difference in this script is that in the do_insert() function OCI_DEFAULT has been added so it doesn't automatically commit, and an explicit commit has been added after the insertion loop: create sequence emp_id_seq start with 400;
create trigger my_emp_id_trigger
before insert on employees for each row
begin
select emp_id_seq.nextval into :new.employee_id from dual;
end;
/
--
-- Also to simplify the example we remove this trigger otherwise
-- records can only be updated once without violating the
-- PYTHONHOL.JHIST_EMP_ID_ST_DATE_PK constraint
--
drop trigger update_job_history;
--
-- Allow employees to be changed when testing the lab after hours.
--
drop trigger secure_employees; 7Tải URL http: //localhost/~phphol/trans_time_explicit.php. Thời gian chèn là ít hơn.
Nói chung, bạn muốn tất cả hoặc không có dữ liệu của bạn cam kết. Thực hiện kiểm soát giao dịch của riêng bạn có hiệu suất và lợi ích tích hợp dữ liệu. Lưu ý: Giá trị thời gian của bạn có thể khác nhau tùy thuộc vào tài nguyên phần cứng bạn đang sử dụng. Your time values may differ depending on the hardware resources you are using.
|
---|
Sử dụng các thủ tục được lưu trữPL/SQL là mở rộng ngôn ngữ thủ tục của Oracle cho SQL. Các quy trình và chức năng PL/SQL được lưu trữ trong cơ sở dữ liệu. Sử dụng PL/SQL cho phép tất cả các ứng dụng cơ sở dữ liệu tái sử dụng logic, bất kể ứng dụng truy cập cơ sở dữ liệu như thế nào. Nhiều hoạt động liên quan đến dữ liệu có thể được thực hiện trong PL/SQL nhanh hơn so với trích xuất dữ liệu vào một chương trình (ví dụ: PHP) và sau đó xử lý nó. Oracle cũng hỗ trợ các thủ tục lưu trữ Java.s reuse logic, no matter how the application accesses the database. Many data-related operations can be performed in PL/SQL faster than extracting the data into a program (for example, PHP) and then
processing it. Oracle also supports Java stored procedures. Trong hướng dẫn này, bạn sẽ tạo một quy trình được lưu trữ PL/SQL và gọi nó trong tập lệnh PHP. Thực hiện các bước sau:
. | Bắt đầu SQL*Plus và tạo một bảng mới, PTAB với lệnh sau:ptab with the following command: create sequence emp_id_seq start with 400;
create trigger my_emp_id_trigger
before insert on employees for each row
begin
select emp_id_seq.nextval into :new.employee_id from dual;
end;
/
--
-- Also to simplify the example we remove this trigger otherwise
-- records can only be updated once without violating the
-- PYTHONHOL.JHIST_EMP_ID_ST_DATE_PK constraint
--
drop trigger update_job_history;
--
-- Allow employees to be changed when testing the lab after hours.
--
drop trigger secure_employees; 8
|
---|
. | Trong SQL*Plus, hãy tạo một quy trình được lưu trữ, MyProc, để chèn dữ liệu vào bảng PTAB, với các lệnh sau:myproc, to insert data into the ptab table, with the following commands: create sequence emp_id_seq start with 400;
create trigger my_emp_id_trigger
before insert on employees for each row
begin
select emp_id_seq.nextval into :new.employee_id from dual;
end;
/
--
-- Also to simplify the example we remove this trigger otherwise
-- records can only be updated once without violating the
-- PYTHONHOL.JHIST_EMP_ID_ST_DATE_PK constraint
--
drop trigger update_job_history;
--
-- Allow employees to be changed when testing the lab after hours.
--
drop trigger secure_employees; 9
|
---|
. | Xem lại mã trong $ home/public_html/Proc.php$HOME/public_html/proc.php oci8.connection_class = MYPHPAPP 0 |
---|
. | Từ trình duyệt web, nhập URL sau để hiển thị đầu ra: oci8.connection_class = MYPHPAPP 1Tập lệnh PHP đã tạo ra một hàng mới trong bảng PTAB bằng cách gọi quy trình được lưu trữ MyProc. Bảng PTAB có một hàng mới với các giá trị "MyData" và 123.ptab table by calling the stored procedure myproc. The table
ptab has a new row with the values "mydata" and 123. Chuyển sang phiên SQL*Plus của bạn và truy vấn bảng để hiển thị hàng mới: chọn * từ ptab;
|
---|
. | Mở rộng Proc.php để sử dụng một biến liên kết. Thay đổi Proc.php thành phần sau (thay đổi in đậm):proc.php to use a bind variable. Change proc.php to the following (changes are in bold): oci8.connection_class = MYPHPAPP 2Hàm OCI_BIND_BY_NAME () liên kết biến PHP $ V thành ": BV" và thử nghiệm Thay đổi giá trị được chèn bằng cách thay đổi giá trị trong $ v.oci_bind_by_name() function binds the PHP variable $v to ":bv" and experiment changing the value inserted by changing the
value in $v. Chạy lại url sau: oci8.connection_class = MYPHPAPP 1Chuyển sang phiên SQL*Plus của bạn và truy vấn bảng một lần nữa để hiển thị hàng mới: chọn * từ ptab;
|
---|
. | Các chức năng được lưu trữ PL/SQL cũng thường được sử dụng trong Oracle. Trong sql*plus, hãy tạo hàm được lưu trữ PL/SQL myFunc () để chèn một hàng vào bảng PTAB và trả về gấp đôi giá trị chèn:myfunc()to insert a row into the ptab table, and return double the inserted value: oci8.connection_class = MYPHPAPP 4
|
---|
. | Xem lại mã trong $ home/public_html/func.php$HOME/public_html/func.php oci8.connection_class = MYPHPAPP 5Vì một giá trị đang được trả về, tham số độ dài tùy chọn thành OCI_BIND_BY_NAME () được đặt thành 10 để PHP có thể phân bổ số lượng bộ nhớ chính xác để giữ tới 10 chữ sốoci_bind_by_name() is set to 10 so PHP can allocate the correct amount of memory to hold up to 10 digits Chạy lại url sau: oci8.connection_class = MYPHPAPP 6
|
---|
Chuyển sang phiên SQL*Plus của bạn và truy vấn bảng một lần nữa để hiển thị hàng mới:chọn * từ ptab;
. | Các chức năng được lưu trữ PL/SQL cũng thường được sử dụng trong Oracle. Trong sql*plus, hãy tạo hàm được lưu trữ PL/SQL myFunc () để chèn một hàng vào bảng PTAB và trả về gấp đôi giá trị chèn:$HOME/public_html/fetch_prefetch.sql oci8.connection_class = MYPHPAPP 7Xem lại mã trong $ home/public_html/func.php Vì một giá trị đang được trả về, tham số độ dài tùy chọn thành OCI_BIND_BY_NAME () được đặt thành 10 để PHP có thể phân bổ số lượng bộ nhớ chính xác để giữ tới 10 chữ số Cải thiện hiệu suất truy vấn
|
---|
. | Phần này cho thấy một số cách để cải thiện hiệu suất truy vấn. Thực hiện các bước sau:$HOME/public_html/fetch_prefetch.php oci8.connection_class = MYPHPAPP 8Xem lại SQL trong $ home/public_html/fetch_prefetch.sql Kịch bản này tạo ra một bảng với một số lượng lớn các hàng. Từ phiên SQLPLUS của bạn, hãy chạy như sau:
|
---|
. | Kết nối PHPHOL/Chào mừng oci8.connection_class = MYPHPAPP 9@fetch_prefetch Xem lại mã trong $ home/public_html/fetch_prefetch.phpphp.ini. Prior to PHP 5.3, the default prefetch size was 10 rows. In 5.3, it is 100 rows. You should choose a suitable default value for your application, and use oci_set_prefetch() for specific queries that need a different value. Điều này thực hiện cùng một truy vấn với các kích thước trước khác nhau. Giới thiệu trước là một hình thức đệm hàng bên trong. Số lượng hàng trong bộ đệm là giá trị trước. Giá trị trước càng lớn, số lượng truy cập cơ sở dữ liệu vật lý càng ít để trả lại tất cả dữ liệu cho PHP, bởi vì mỗi yêu cầu vật lý cơ bản cho cơ sở dữ liệu trả về nhiều hơn một hàng. Điều này có thể giúp cải thiện hiệu suất. Mã PHP không cần thay đổi để xử lý các kích thước trước khác nhau. Bộ đệm được xử lý bằng mã Oracle.
|
---|
. | Bộ trợ giúp tập lệnh được bao gồm bao gồm các hàm thời gian đơn giản () và hết thời gian (), cũng như một số hàm thiết lập bổ sung được sử dụng sau này.oci_bind_array_by_name() function that allows a PHP array to be retrieved from, or passed to, a PL/SQL procedure. Tải URL sau để hiển thị đầu ra:$HOME/public_html/fetch_bulk.sql <?php
// Create connection to Oracle
$conn = oci_connect("phphol", "welcome", "//localhost/orcl");
if (!$conn) {
$m = oci_error();
echo $m['message'], "\n";
exit;
}
else {
print "Connected to Oracle!";
}
// Close the Oracle connection
oci_close($conn);
?> 0Tải lại một vài lần để xem thời gian trung bình. Giá trị thời gian của bạn có thể khác nhau tùy thuộc vào tài nguyên phần cứng của bạn, v.v.BIGTAB using a PL/SQL BULK COLLECT
statement, and returns the results in a PL/SQL array. From your sqlplus session, run the following: <?php
// Create connection to Oracle
$conn = oci_connect("phphol", "welcome", "//localhost/orcl");
if (!$conn) {
$m = oci_error();
echo $m['message'], "\n";
exit;
}
else {
print "Connected to Oracle!";
}
// Close the Oracle connection
oci_close($conn);
?> 1
|
---|
. | Xem lại mã trong $ home/public_html/fetch_bulk.php$HOME/public_html/fetch_bulk.php <?php
// Create connection to Oracle
$conn = oci_connect("phphol", "welcome", "//localhost/orcl");
if (!$conn) {
$m = oci_error();
echo $m['message'], "\n";
exit;
}
else {
print "Connected to Oracle!";
}
// Close the Oracle connection
oci_close($conn);
?> 2Mã này gọi gói PL/SQL và liên kết một biến PHP để giữ mảng dữ liệu được trả về. Không cần cuộc gọi tìm nạp OCI8.
|
---|
. | Tải URL sau để hiển thị đầu ra: <?php
// Create connection to Oracle
$conn = oci_connect("phphol", "welcome", "//localhost/orcl");
if (!$conn) {
$m = oci_error();
echo $m['message'], "\n";
exit;
}
else {
print "Connected to Oracle!";
}
// Close the Oracle connection
oci_close($conn);
?> 3Tải lại một vài lần để xem thời gian trung bình. Binding mảng là một kỹ thuật hữu ích để giảm chi phí cơ sở dữ liệu khi chèn hoặc truy xuất dữ liệu. Ví dụ này không in kết quả trả lại. Nếu bạn muốn xem chúng, hãy thêm "var_dump ($ res);" Trước câu lệnh trả về chức năng. Đầu ra cho thấy các chuỗi dữ liệu 20 ký tự ngẫu nhiên được tạo bởi fetch_prefetch.sql, mà bạn đã chạy trước đó.var_dump($res);" before the function return statement. The output shows the random 20-character data strings created by fetch_prefetch.sql, which you ran earlier.
|
---|
Sử dụng LOB: Tải lên và truy vấn hình ảnhCác cột đối tượng lớn của ký tự Oracle (CLOB) và các cột đối tượng lớn nhị phân (BLOB) (và các biến PL/SQL) có thể chứa một lượng dữ liệu rất lớn. Có nhiều cách khác nhau để tạo chúng để tối ưu hóa lưu trữ Oracle. Ngoài ra còn có một gói được cung cấp trước DBMS_LOB giúp thao túng chúng trong PL/SQL dễ dàng.DBMS_LOB that makes manipulating them in PL/SQL easy. Để tạo một ứng dụng nhỏ để tải và hiển thị hình ảnh vào cơ sở dữ liệu, hãy thực hiện các bước sau.
. | Trước khi thực hiện phần này, hãy tạo một bảng để lưu trữ một đốm màu. Trong SQL*Plus đã đăng nhập dưới dạng PHPHOL, thực thi các lệnh sau:phphol, execute the following commands: <?php
// Create connection to Oracle
$conn = oci_connect("phphol", "welcome", "//localhost/orcl");
if (!$conn) {
$m = oci_error();
echo $m['message'], "\n";
exit;
}
else {
print "Connected to Oracle!";
}
// Close the Oracle connection
oci_close($conn);
?> 4
|
---|
. | Xem lại mã trong $ home/public_html/blobins.php$HOME/public_html/blobins.php <?php
// Create connection to Oracle
$conn = oci_connect("phphol", "welcome", "//localhost/orcl");
if (!$conn) {
$m = oci_error();
echo $m['message'], "\n";
exit;
}
else {
print "Connected to Oracle!";
}
// Close the Oracle connection
oci_close($conn);
?> 5Điều này cho thấy mã HTML được nhúng trong nhiều khối PHP. Cụ thể, câu lệnh PHP 'IF' bao quanh mã HTML. Lần đầu tiên tập lệnh được tải, biểu mẫu tải lên HTML được hiển thị. PHP đã điền vào tên hành động biểu mẫu để gọi cùng một tập lệnh. Có một mối quan hệ trực tiếp giữa tên biểu mẫu HTML Tên = "lob_upload" và biến PHP đặc biệt $ _files ['lob_upload']. Khi biểu mẫu được gọi với dữ liệu, tập lệnh sẽ xóa bất kỳ hình ảnh hiện có nào khỏi bảng và chèn hình ảnh mới.name="lob_upload" and the special PHP variable $_FILES['lob_upload']. When the form is called with data, the script deletes any existing image from the table, and inserts the new picture. Kịch bản hiển thị việc sử dụng oci_new_descriptor () được liên kết với vị trí trống_blob (). Phương thức lob-> saveFile () chèn hình ảnh vào hàng mới được tạo. Lưu ý tùy chọn OCI_DEFAULT cho OCI_EXECUTE () là cần thiết cho phương thức LOB tiếp theo hoạt động.oci_new_descriptor() which is bound to the
empty_blob() location. The LOB->savefile() method inserts the picture to the newly created row. Note the OCI_DEFAULT option to oci_execute() is necessary for the subsequent LOB method to work.
|
---|
. | Từ trình duyệt web của bạn, hãy nhập URL sau để hiển thị đầu ra: <?php
// Create connection to Oracle
$conn = oci_connect("phphol", "welcome", "//localhost/orcl");
if (!$conn) {
$m = oci_error();
echo $m['message'], "\n";
exit;
}
else {
print "Connected to Oracle!";
}
// Close the Oracle connection
oci_close($conn);
?> 6
Nó hiển thị một biểu mẫu web với các nút duyệt và tải lên. Nhấp vào Duyệt.Browse.
|
---|
. | Chọn Oracle.jpg từ thư mục/home/phphol/public_html và nhấp vào mở.oracle.jpg from the /home/phphol/public_html directory and click Open.
|
---|
. | Nhấp vào Tải lên.Upload. Hành động biểu mẫu gọi tập lệnh là lần thứ hai, nhưng bây giờ biến đặc biệt $ _files ['lob_upload'] đã được đặt và hình ảnh được tải lên. Thông điệp Echo thành công được hiển thị.$_FILES['lob_upload'] is set and picture is uploaded. The successful echo
message is displayed. Hình ảnh đã được tải lên máy chủ web.
|
---|
. | Để hiển thị hình ảnh, hãy xem lại mã trong $ home/public_html/blobview.php$HOME/public_html/blobview.php <?php
// Create connection to Oracle
$conn = oci_connect("phphol", "welcome", "//localhost/orcl");
if (!$conn) {
$m = oci_error();
echo $m['message'], "\n";
exit;
}
else {
print "Connected to Oracle!";
}
// Close the Oracle connection
oci_close($conn);
?> 7 |
---|
. | Từ trình duyệt web của bạn, hãy nhập URL sau để hiển thị đầu ra: <?php
// Create connection to Oracle
$conn = oci_connect("phphol", "welcome", "//localhost/orcl");
if (!$conn) {
$m = oci_error();
echo $m['message'], "\n";
exit;
}
else {
print "Connected to Oracle!";
}
// Close the Oracle connection
oci_close($conn);
?> 8Nó hiển thị một biểu mẫu web với các nút duyệt và tải lên. Nhấp vào Duyệt. and no echo statements in the script, because otherwise the wrong HTTP header will be sent and the browser won't display the image properly. If you have problems,
comment out the header() function call and see what is displayed.
|
---|
Chọn Oracle.jpg từ thư mục/home/phphol/public_html và nhấp vào mở.Nhấp vào Tải lên.
. | Hành động biểu mẫu gọi tập lệnh là lần thứ hai, nhưng bây giờ biến đặc biệt $ _files ['lob_upload'] đã được đặt và hình ảnh được tải lên. Thông điệp Echo thành công được hiển thị.$HOME/public_html/app_info.php<?php
// Create connection to Oracle
$conn = oci_connect("phphol", "welcome", "//localhost/orcl");
if (!$conn) {
$m = oci_error();
echo $m['message'], "\n";
exit;
}
else {
print "Connected to Oracle!";
}
// Close the Oracle connection
oci_close($conn);
?> 9
|
---|
. | Hình ảnh đã được tải lên máy chủ web. http://localhost/~phphol/connect.php 0
|
---|
. | Để hiển thị hình ảnh, hãy xem lại mã trong $ home/public_html/blobview.php$HOME/public_html/app_info.sql http://localhost/~phphol/connect.php 1<?php
// Create connection to Oracle
$conn = oci_connect("phphol", "welcome", "//localhost/orcl");
if (!$conn) {
$m = oci_error();
echo $m['message'], "\n";
exit;
}
else {
print "Connected to Oracle!";
}
// Close the Oracle connection
oci_close($conn);
?> 7
|
---|
. | Đảm bảo không có khoảng trắng nào trước đây http://localhost/~phphol/connect.php 2Đặt thông tin theo dõiV$SQLAREA.
|
---|
Để hiển thị hai trong số các chức năng, hãy xem lại mã trong $ home/public_html/app_info.php ________ 49 Từ trình duyệt web của bạn, hãy nhập URL sau để hiển thị đầu ra cơ bản:
. | Xem lại SQL trong $ home/public_html/app_info.sql$HOME/public_html/ajax_id.php Tập lệnh này hiển thị các câu lệnh SQL được thực thi trước đó trong cơ sở dữ liệu bởi mô -đun trang chủ. Mở cửa sổ đầu cuối và nhập các lệnh sau để chạy tập lệnh SQL. |
---|
. | Tập lệnh SQL*Plus hiển thị dữ liệu meta được lưu với câu lệnh. Dữ liệu meta có thể được sử dụng để truy tìm hoặc xác định vị trí trong ứng dụng PHP của câu lệnh SQL sai. Lưu ý chỉ thông tin ứng dụng từ lần thực hiện đầu tiên của một câu lệnh được lưu trữ trong v $ sqlarea. http://localhost/~phphol/connect.php 4
|
---|
. | Kết hợp Ajax vào trang của bạn$HOME/public_html/ajax_id.html Phần này hiển thị kỹ thuật cơ bản để cập nhật một phần của một trang mà không tải lại toàn bộ nội dung. Thực hiện các nhiệm vụ sau:makeRequest(). Bạn có thể sử dụng XMLHTTPREQUEST để cập nhật một phần của trang mà không tải lại toàn bộ nội dung trang. Thực hiện các bước sau: |
---|
. | Tập lệnh SQL*Plus hiển thị dữ liệu meta được lưu với câu lệnh. Dữ liệu meta có thể được sử dụng để truy tìm hoặc xác định vị trí trong ứng dụng PHP của câu lệnh SQL sai. Lưu ý chỉ thông tin ứng dụng từ lần thực hiện đầu tiên của một câu lệnh được lưu trữ trong v $ sqlarea. http://localhost/~phphol/connect.php 6 Kết hợp Ajax vào trang của bạnOK to dismiss the alert window. Phần này hiển thị kỹ thuật cơ bản để cập nhật một phần của một trang mà không tải lại toàn bộ nội dung. Thực hiện các nhiệm vụ sau: if you use Internet Explorer, you will need to edit ajax_id.html and change the
XMLHttpRequest() call to ActiveXObject("Msxml2.XMLHTTP") or ActiveXObject("Microsoft.XMLHTTP"). Khi trang HTML được tải, hàm javascript makerequest () được gọi. Nó chuẩn bị một yêu cầu xmlhttprequest để gọi ajax_id.php. Một chức năng gọi lại trên readyStateChange được đặt. Cuối cùng, yêu cầu được gửi đến máy chủ web không đồng bộ.makeRequest() javascript function is called. It prepares an XMLHttpRequest request to call
ajax_id.php. A callback function onreadystatechange is set. Finally the request is sent to the webserver asynchronously. Khi chức năng gọi lại được thông báo rằng yêu cầu máy chủ web đã được trả về, đầu ra từ ajax_id.php được hiển thị bởi hàm alert (). Trong ứng dụng web, tập lệnh Java có thể được gọi bởi các sự kiện khác nhau và có thể được thực hiện để thay đổi nội dung của trang hiện tại.ajax_id.php is displayed by the alert() function. In web application, the Java
script could be invoked by various events and could be made to alter the content of the current page.
|
---|
. | Chỉnh sửa ajax_id.html và thay đổi 185 thành 186.ajax_id.html and change 185 to 186.
|
---|
. | Chỉnh sửa ajax_id.html và thay đổi 185 thành 186.OK to dismiss the alert window. Tải lại nó trong trình duyệt. Giá trị mới được hiển thị. Bấm OK để loại bỏ cửa sổ cảnh báo.You may also need to flush the browser cache to see the changed value.
|
---|
Lưu ý: Bạn cũng có thể cần phải xóa bộ đệm trình duyệt để xem giá trị thay đổi.Bản tóm tắt - Trong hướng dẫn này, bạn đã học được cách:
- Tạo một kết nối
- Sử dụng gộp kết nối thường trú cơ sở dữ liệu
- Tìm nạp dữ liệu
- Sử dụng các biến liên kết
- Sử dụng giao dịch
- Gọi PL/SQL
- Cải thiện hiệu suất truy vấn
- Sử dụng LOB để tải lên và truy vấn hình ảnh
Kết hợp Ajax vào trang của bạnPhụ lục: Primer PHP PHP là một ngôn ngữ kịch bản được đánh máy động. Nó thường được nhìn thấy trong các ứng dụng web nhưng có thể được sử dụng để chạy các tập lệnh dòng lệnh. Cú pháp php cơ bản là đơn giản để học. Nó có các vòng lặp quen thuộc, kiểm tra và cấu trúc chuyển nhượng. Các dòng được chấm dứt với một đại hội. http://localhost/~phphol/connect.php 7Chuỗi có thể được đặt trong các trích dẫn đơn hoặc đôi: http://localhost/~phphol/connect.php 8Tên biến được tiền tố với một dấu hiệu đô la. Những thứ trông giống như các biến bên trong chuỗi được trích xuất kép sẽ được mở rộng: http://localhost/~phphol/connect.php 9Chuỗi và biến cũng có thể được nối bằng một khoảng thời gian. column username format a30
column logon_time format a18
set pagesize 1000 feedback off echo on
select username, to_char(logon_time, 'DD-MON-YY HH:MI:SS') logon_time
from v$session
where username is not null;
exit
0Các biến không cần loại được khai báo: column username format a30
column logon_time format a18
set pagesize 1000 feedback off echo on
select username, to_char(logon_time, 'DD-MON-YY HH:MI:SS') logon_time
from v$session
where username is not null;
exit
1Mảng có thể có các chỉ mục số hoặc kết hợp:echo or print statement. Formatted output with printf() is also possible. column username format a30
column logon_time format a18
set pagesize 1000 feedback off echo on
select username, to_char(logon_time, 'DD-MON-YY HH:MI:SS') logon_time
from v$session
where username is not null;
exit
2Chuỗi và biến có thể được hiển thị với một câu lệnh ECHO hoặc IN. Đầu ra định dạng với printf () cũng có thể.var_dump() function is useful for debugging. column username format a30
column logon_time format a18
set pagesize 1000 feedback off echo on
select username, to_char(logon_time, 'DD-MON-YY HH:MI:SS') logon_time
from v$session
where username is not null;
exit
3Hàm var_dump () rất hữu ích để gỡ lỗi.$a2 assigned above, this would output: column username format a30
column logon_time format a18
set pagesize 1000 feedback off echo on
select username, to_char(logon_time, 'DD-MON-YY HH:MI:SS') logon_time
from v$session
where username is not null;
exit
4Với giá trị của $ A2 được chỉ định ở trên, điều này sẽ xuất ra:switch statement. The if/elseif/else statements look like: column username format a30
column logon_time format a18
set pagesize 1000 feedback off echo on
select username, to_char(logon_time, 'DD-MON-YY HH:MI:SS') logon_time
from v$session
where username is not null;
exit
5Luồng mã có thể được kiểm soát với các bài kiểm tra và vòng lặp. PHP cũng có một tuyên bố chuyển đổi. Các câu lệnh if/otherif/other trông giống như: Điều này cũng cho thấy cách các khối mã được đặt trong niềng răng. column username format a30
column logon_time format a18
set pagesize 1000 feedback off echo on
select username, to_char(logon_time, 'DD-MON-YY HH:MI:SS') logon_time
from v$session
where username is not null;
exit
6Một vòng lặp truyền thống là:$i is incremented in each iteration. The loop stops when the test condition evaluates to false. You can also loop with while or do while constructs. Điều này in các số 0 đến 9. Giá trị của $ I được tăng lên trong mỗi lần lặp. Vòng lặp dừng khi điều kiện kiểm tra đánh giá là sai. Bạn cũng có thể lặp lại trong khi hoặc làm trong khi xây dựng.foreach
command is useful to iterate over arrays: column username format a30
column logon_time format a18
set pagesize 1000 feedback off echo on
select username, to_char(logon_time, 'DD-MON-YY HH:MI:SS') logon_time
from v$session
where username is not null;
exit
7Lệnh foreach rất hữu ích để lặp lại các mảng:$v to each element of the array in turn. Điều này đặt $ V cho mỗi phần tử của mảng lần lượt. column username format a30
column logon_time format a18
set pagesize 1000 feedback off echo on
select username, to_char(logon_time, 'DD-MON-YY HH:MI:SS') logon_time
from v$session
where username is not null;
exit
8Một chức năng có thể được xác định: column username format a30
column logon_time format a18
set pagesize 1000 feedback off echo on
select username, to_char(logon_time, 'DD-MON-YY HH:MI:SS') logon_time
from v$session
where username is not null;
exit
9Các chức năng có thể có số lượng thay đổi của các đối số và có thể hoặc không thể trả về các giá trị. Chức năng này có thể được gọi bằng cách sử dụng: Các cuộc gọi chức năng có thể xuất hiện sớm hơn định nghĩa hàm.include() or require() statement. cd $HOME/public_html
sqlplus -l phphol/welcome @usersess.sql 0Files phụ có thể được bao gồm trong các tập lệnh PHP với câu lệnh bao gồm () hoặc yêu cầu ().require() will generate a fatal error if the script is not found. A Yêu cầu () sẽ tạo ra một lỗi nghiêm trọng nếu không tìm thấy tập lệnh. cd $HOME/public_html
sqlplus -l phphol/welcome @usersess.sql 1Nhận xét là một dòng đơn: cd $HOME/public_html
sqlplus -l phphol/welcome @usersess.sql 2hoặc đa dòng: and ?> tags. cd $HOME/public_html
sqlplus -l phphol/welcome @usersess.sql 3Các tập lệnh PHP được đặt trong các thẻ. Khi một máy chủ web được cấu hình để chạy các tệp PHP thông qua trình thông dịch PHP, việc tải tập lệnh trong trình duyệt sẽ khiến mã PHP được thực thi và tất cả đầu ra được truyền đến trình duyệt. cd $HOME/public_html
sqlplus -l phphol/welcome @usersess.sql 4Các khối mã PHP và mã HTML có thể được xen kẽ. Mã PHP cũng có thể in rõ ràng các thẻ HTML. php.ini configuration file. The location of the file is system specific. Its location, the list of extensions loaded, and the value of all the initialization settings can be found using the phpinfo() function: cd $HOME/public_html
sqlplus -l phphol/welcome @usersess.sql 5Nhiều khía cạnh của PHP được kiểm soát bởi các cài đặt trong tệp cấu hình php.ini. Vị trí của tệp là cụ thể của hệ thống. Vị trí của nó, danh sách các phần mở rộng được tải và giá trị của tất cả các cài đặt khởi tạo có thể được tìm thấy bằng cách sử dụng hàm phpinfo ():phpl.ini and restarting the Web server. Some values can
also be changed within scripts by using the ini_set() function. Các giá trị có thể được thay đổi bằng cách chỉnh sửa phpl.ini và khởi động lại máy chủ web. Một số giá trị cũng có thể được thay đổi trong các tập lệnh bằng cách sử dụng hàm ini_set ().oci functions include the following:
Một danh sách các chức năng OCI khác nhau bao gồm: | OCI_BIND_ARRAY_BY_NAME
| Liên kết mảng PHP với mảng Oracle PL/SQL theo tên | OCI_BIND_BY_NAME
| Liên kết biến PHP với trình giữ chỗ Oracle | OCI_CANCEL
| Hủy đọc từ con trỏ | OCI_CLOSE
| Đóng kết nối Oracle | OCI_COMMIT
| Cam kết tuyên bố nổi bật | OCI_Connect
| Thiết lập kết nối với máy chủ Oracle | OCI_DEFINE_BY_NAME
| Sử dụng biến PHP cho bước xác định trong khi chọn | OCI_ERROR
| Trả về lỗi cuối cùng được tìm thấy | OCI_EXECUTE
| Thực thi một tuyên bố | OCI_FETCH_ALL
| Tìm nạp tất cả các hàng dữ liệu kết quả vào một mảng | oci_fetch_array
| Trả về hàng tiếp theo từ dữ liệu kết quả dưới dạng mảng kết hợp hoặc số hoặc cả hai | OCI_FETCH_ASSOC
| Trả về hàng tiếp theo từ dữ liệu kết quả dưới dạng mảng kết hợp | OCI_Fetch_Object
| Trả về hàng tiếp theo từ dữ liệu kết quả dưới dạng đối tượng | Trả về hàng tiếp theo từ dữ liệu kết quả dưới dạng mảng số
| OCI_FETCH | Lấy hàng tiếp theo vào bộ đệm kết quả
| OCI_FIELD_IS_NULL | Kiểm tra xem trường có phải là null không
| OCI_FIELD_NAME | Trả về tên của một trường từ câu lệnh
| OCI_FIELD_PRECISION | Cho biết độ chính xác của một lĩnh vực
| OCI_FIELD_SCALE | Cho biết quy mô của lĩnh vực
| OCI_FIELD_SIZE | Trả về kích thước của trường
| OCI_FIELD_TYPE_RAW | Cho biết kiểu dữ liệu oracle thô của trường
| OCI_FIELD_TYPE | Trả về kiểu dữ liệu của trường
| oci_free_statement | Giải phóng tất cả các tài nguyên liên quan đến tuyên bố hoặc con trỏ
| OCI_INTERNAL_DEBUG | Cho phép hoặc vô hiệu hóa đầu ra gỡ lỗi nội bộ
| OCI_New_Collection | Phân bổ đối tượng bộ sưu tập mới
| OCI_New_Connect | Thiết lập kết nối mới với máy chủ Oracle
| OCI_NEW_CURSOR | Phân bổ và trả về một con trỏ mới (xử lý câu lệnh)
| OCI_New_Descriptor | Khởi tạo một bộ mô tả tệp hoặc tệp trống mới
| OCI_NUM_FIELDS | Trả về số lượng cột kết quả trong một câu lệnh
| OCI_NUM_ROWS | Trả về số lượng hàng bị ảnh hưởng trong quá trình thực thi tuyên bố
| OCI_PARSE | Chuẩn bị tuyên bố Oracle để thực thi
| OCI_Password_change | Thay đổi mật khẩu của người dùng Oracle
| OCI_PConnect | Kết nối với cơ sở dữ liệu Oracle bằng cách sử dụng kết nối liên tục
| OCI_RESULT | Trả về giá trị của một trường từ một hàng được tìm nạp
| OCI_Rollback | Cuộn trở lại giao dịch chưa thanh toán
| OCI_SERVER_Version | Trả về phiên bản máy chủ
| OCI_SET_PREFETCH | Đặt số lượng hàng được tìm trước
| OCI_Statement_Type | Trả về loại câu lệnh OCI
|
Chúng ta có thể sử dụng Oracle với XAMPP không?
XAMPP là gói nguồn mở chứa Apache, PHP và nhiều phần mở rộng PHP '. Một trong những tiện ích mở rộng này là PHP OCI8 kết nối với cơ sở dữ liệu của Oracle. Để cài đặt XAMPP: Tải xuống "XAMPP cho Windows" và theo dõi trình hướng dẫn cài đặt.One of these extension is PHP OCI8 which connects to Oracle Database. To install XAMPP: Download "XAMPP for Windows" and follow the installer wizard.
Làm cách nào để kết nối với cơ sở dữ liệu Oracle trong thiết bị đầu cuối?
Để kết nối với cơ sở dữ liệu Oracle từ SQL*plus:.. Nếu bạn đang ở trên hệ thống Windows, hãy hiển thị dấu nhắc lệnh Windows .. Tại dấu nhắc lệnh, nhập sqlplus và nhấn phím enter.SQL*Plus bắt đầu và nhắc bạn cho tên người dùng của bạn .. Nhập tên người dùng của bạn và nhấn phím Enter..... Nhập mật khẩu của bạn và nhấn phím Enter ..
Làm cách nào để kết nối với cơ sở dữ liệu Oracle hiện có?
Để kết nối với cơ sở dữ liệu Oracle từ SQL*Plus: Nếu bạn đang ở trên hệ thống Windows, hãy hiển thị dấu nhắc lệnh Windows.Tại dấu nhắc lệnh, nhập sqlplus và sau đó nhấn phím enter.At the command prompt, type sqlplus and then press the key Enter. At the user name prompt, type your user name and then press the key Enter.
Chúng ta có thể kết nối cơ sở dữ liệu Oracle với PHP không?
Kết nối với Oracle từ PHP bằng trình điều khiển ODBC cho Oracle PHP là một trong những ngôn ngữ lập trình phổ biến nhất để phát triển trang web.Trình điều khiển ODBC là các đầu nối tạo cơ sở dữ liệu phát triển PHP - phần mềm của bạn được viết trong PHP sẽ hoạt động với bất kỳ hệ thống quản lý cơ sở dữ liệu của nhà cung cấp nào.
PHP is one of the most popular programming languages for website development. ODBC drivers are connectors that make PHP development database agnostic — your software written in PHP will function with any vendor's database management system. |