歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> PERL編程

PERL與MySQL

  一、簡介 PERL應用數據庫由兩種方法,其一是利用本身所配置的DBM包,這個可以建立數據庫並對其進行操作,因此可以把DBM包以及其他類似的包看作是一個數據庫的擴展。另一個就是利用DBI包或者類似的包建立與其他關系型數據庫的連接,顯然,我們通常需要利用後者。 數據庫接口(DBI)是由TIM BUNCE([email protected])所書寫,DBI是專門為PERL所書寫。你可以在 http://www.hermetica.com/technologia/DBI/ 查找到相應的信息。 最初,DBI只是由Tim Bunce開發的一個接口包,後來,他開發了DBD::Oracle包用於處理與Oracle的接口。然後,就有了一系列的DBD::Modules的包用於處理與其他類型的數據庫的接口。同樣,你可以在: http://www.hermetica.com/technologia/DBI/取得詳細的信息。現在可以得到的包有如下: DBD-Oracle-0.29.tar.gz : Oracle 數據庫 DBD-Informix-0.20pl0.tar.gz : Informix 數據庫 DBD-QBase-0.03.tar.gz : Quickbase DBD-mSQL-0.60pl9.tar.gz : mSQL-based 數據庫 DBI-0.67.tar.gz : DBI 接口 另外還有ODBC的驅動,從而可以載WINDOWS系統下驅動如Access之類的數據庫系統。(當然,PERL FOR WIN32中也有WIN32::ODBC的包用於處理ODBC兼容的驅動程序) 當取回DBI的驅動程序包之後,先不急安裝,首先,測試PERL5是否安裝,這一點很重要,然後: 如果PERL5已經安裝: perl Makefile.PL 如果沒有安裝:perl Makefile.PL PERL_SRC=/path/to/perl/source/dir 然後: make make install完成安裝 你可以在系統下執行指令$ PERL_DL_DEBUG=255 perl -e 'use DBI;' 然後可以得到大致如此的結果: DynaLoader.pm loaded (/usr/local/lib/perl5/i486-Linux/5.003 /usr/local/lib/perl5 /usr/local/lib/perl5/site_perl/i486-linux /usr/local/lib/perl5/site_perl . /usr/local/lib /usr/local/lib /lib /usr/lib) DynaLoader::bootstrap for DBI (auto/DBI/DBI.so) 這樣說明你的DBI包已經安裝成功了。 DBI和DBD包運行的模式如下: (圖:DBI、DBD的工作模式) 讓我們看看連接數據發生的典型的過程: 1、載入DBI驅動程序 2、使用DBD連接相應的數據庫 3、打開含有SQL指令的游標 4、取回數據集 5、關閉游標 6、關閉數據庫連接 7、退出 我們使用DBI之前首先需要聲明: #!/usr/bin/perl -w use DBI; 我們有兩種方法可以建立PERL與數據庫之間的連接: #!/usr/bin/perl -w use DBI; #建立與數據庫的連接,第4個參數標明數據庫類型 $dbh = DBI->connect( 'connection_string', 'username', 'passWord', 'mSQL' ); if ( !defined $dbh ) {


die "Cannot do \$dbh->connect: $DBI::errstr\n"; } 通過這種方法,返回一個數據庫句柄。這是一種常用的用法,另外一種方法返回“驅動程序句柄”: #!/usr/bin/perl -w use DBI; $drh = DBI->install_driver( 'mSQL' ); if ( !defined $drh ) { die "Cannot load driver: $!\n"; } 這種方法多用來檢查是否系統中是否存在某種驅動程序。 在使用中,有三種句柄將要在程序設計中涉及到:驅動程序句柄(Driver Handle)、數據庫句柄(DataBase Handle)、語句句柄(Statement Handle),它們之間的關系可以用下圖來表示: (圖:驅動程序句柄、數據句柄和語句句柄的工作關系) 以下是一些利用DBI處理數據庫的歷程: 1、打開連接(數據庫)已經關閉 #!/usr/bin/perl -w # # (c)1996 Alligator Descartes # # inout.pl: Connects and disconnects from a specified database use DBI; if ( $#ARGV < 0 ) { die "Usage: inout.pl \n"; } # Create new database handle. If we can't connect, die() $dbh = DBI->connect( '', $ARGV[0], '', $ARGV[1] ); if ( !defined $dbh ) { die "Cannot connect to mSQL server: $DBI::errstr\n"; } # Disconnect from the database $dbh->disconnect; exit; 二、DBI與DBD::mysql DBI是一個許多數據庫通用的接口,這意味著你可以寫出一個可以工作於許多不同的數據庫的腳本。為此,你需要一個為每中數據庫類型定義的DATABASE DRIVER(DBD),對於MySQL來說,這個驅動程序叫DBD::mysql。你可以參考DBIs web page以獲得更多的信息。為了獲得在Perl5中的關於面向對象編程的概念,請參考the perl OOP page 三、DBI接口 通用DBI方法 connect 建立與一個數據庫服務器的連接 prepare 獲取准備執行的SQL語句 do 准備並執行一個SQL語句 disconnect 斷開與一個數據庫服務器的連接 quote 被插入引用字符串(塊) execute 執行存儲過程 fetchrow_array 取出下一行到一個數組之中 fetchrow_arrayref 取出下一行到數組中,返回數組的引用 fetchrow_hashref 取出下一行到哈希表,返回其引用 fetchall_arrayref 取出所有的數據到一個數組,返回其引用。 finish 結束語句、釋放系統資源 rows 返回作用的行的數目 data_sources 返回本機中可用的數據庫的數組。 ChopBlanks 去除空格 NUM_OF_PARAMS 存儲過程中占位符的數目 NULLABLE 哪一個行允許Null。

MySQL 的特殊方法 insertid 最後自動遞增的值 is_blob 為BLOB的行 is_key 為鍵的行 is_num 為數字的行 is_pri_key 為主鍵的行 is_not_null 不能為NULL的行 length 理論上最大的列的數目 max_length 物理上最大的列的數目 NAME 列名 NUM_OF_FIELDS 返回的字段的數目 table 返回的集中的表的名稱 type 行的類型 _CreateDB 創建一個數據庫 _DropDB 刪除一個數據庫 connect: 使用connect方法建立一個到數據源的連接。$data_source應該以DBI:driver_name:開始,例如: $dbh = DBI->connect("DBI:mysql:$database", $user, $password); $dbh = DBI->connect("DBI:mysql:$database:$hostname", $user, $password); $dbh = DBI->connect("DBI:mysql:$database:$hostname:$port", $user, $password); 如果用戶名或者是口令沒有定義的話,那麼DBI將使用DBI_USER,DBI_PASS環境變量分別作為其值。如果你沒有定義主機的話,那麼默認的是“localhost”,如果你沒有定義端口號的話,以默認的mysql的端口號(3306)作為端口號。 prepare: 通過數據庫引擎預備SQL語句並且返回一個語句句柄($sth)用於參與execute方法,例如: $sth = $dbh->prepare($statement) or die "Can't prepare $statement: $dbh->errstr\n"; do do方法預備並執行一個SQL語句,返回作用的行的數目,這個方法通常用於非select的語句,同時一般不需要執行多次(例如:insert,delete等)。例如: $rc = $dbh->do($statement) or die "Can't execute $statement: $dbh- >errstr\n"; disconnect disconnect將斷開與數據庫的連接,通常在程序結束的時候使用。例如: $rc = $dbh->disconnect; quote quote方法用於 "escape"任何在字符串中的特定自負,並且加上引用標記。 $sql = $dbh->quote($string) execute 該方法執行一個存儲的語句。對於非select的語句來說,它返回作用的行的數目,對於select語句來說,該方法僅僅是開始了在數據庫中查詢,你需要fetch_*方法來取回數據。 $rv = $sth->execute or die "can't execute the query: $sth->errstr; fetchrow_array 這個方法取回



該方法執行一個存儲的語句。對於非select的語句來說,它返回作用的行的數目,對於select語句來說,該方法僅僅是開始了在數據庫中查詢,你需要fetch_*方法來取回數據。 $rv = $sth->execute or die "can't execute the query: $sth->errstr; fetchrow_array 這個方法取回



Copyright © Linux教程網 All Rights Reserved