歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網

DBI/MYSQL FAQ

日期:2017/2/27 14:13:48   编辑:更多Linux
  1. 哪裡可以找到關於mysql和DBI的文檔資料? 答:MySQL可以到其官方主頁 http://www.mysql.com 關於DBI可以到DBD/DBI主頁 http://www.symbolstone.org/technology/perl/DBI 在http://www.savebaseball.com/mysql 也可以找到DBI和MySQL的一些信息 已經安裝了DBI的系統可以在用perldoc DBI 或 man DBI 或 perldoc mysql 等命令查看信息。 2. 什麼是DBI? 答: 以下答案引自DBI的作者Tim Bunce: "DBI是用於Perl語言、操作數據庫的應用程序借口(API)。DBI API規范定義了一套函數(functions),變量和協定,提供了一個穩定的數據庫接口而不必考慮實際使用什麼樣的數據庫" 用更精煉的語言來描述就是,DBI作為Perl語言的接口,允許使用者不需要更改程序就可以操作不同的數據庫. 3. 哪裡可以下載DBI? 答: http://www.perl.com/CPAN , http://www.nighthawk.com.cn 4. 什麼是Mysql? 答: MySQL是一個真正多用戶、多線程的SQL數據庫服務器. SQL 是世界上最普及的數據庫語言. MySQL是客戶/服務端機制,即包括一個後端的服務器和許多不同的客戶程序和庫. MySQL數據庫是眾多的關系型數據庫產品中的一個,相比較其它系統而言,MySQL數據庫可以稱得上是目前運行速度最快的SQL語言數據庫。除了具有許多其它數據庫所不具備的功能和選擇之外,MySQL數據庫是一種完全免費的產品,用戶可以直接從網上下載數據庫,用於個人或商業用途,而不必支付任何費用。 MySQL數據庫具有以下主要特點: a. 同時訪問數據庫的用戶數量不受限制; b. 可以保存超過50,000,000條記錄; c. 是目前市場上現有產品中運行速度最快的數據庫系統; d. 用戶權限設置簡單、有效。 5. 哪裡可以下載mysql? 答: http://www.mysql.com 6. 如何知道我現在正用著的mysql的版本? 答: 登錄mysql以後,用s命令可以看到許多關於MYSQL的信息. 7. 如何加入DBI郵件列表? 答: 要獲得更多的信息和更新消息,你可以通過訪問網址www.isc.org/dbi-lists.Html來加入DBI郵件列表(或者發一封電子郵件到[email protected]). 8. 如何安裝MYSQL 答:去http://www.mysql.com/download_win.html,下載MySQL-Win32發行版,將zip文件解壓到一個臨時目錄並且運行安裝程序setup.exe,缺省的典型安裝,所有的MySQL文件將會安裝到c:mysql目錄下。   啟動Mysql的方法是運行c:mysqlbinmysqld-shareware.exe,你可以看到一個dos窗口, 並在幾秒鐘後關閉。如果沒有顯示錯誤信息,MySQL就已經運行了。 9. 如何安裝DBI模塊? 答:安裝dbi之前,請先安裝activeperl(http://www.activestate.com 處可下載) 1)在線安裝 連接上Internet,開一DOS窗口,在提示符下鍵入:PPM PPM> help (可以得到幫助信息) PPM> query DBI (可以察看是否已經安裝了DBI) PPM> install DBI (自動下載並安裝DBI,會列出所有安裝的文件及路徑 2)離線安裝 從www.nighthawk.com.cn處下載DBI.zip,解開到一個臨時目錄 然後,在dos下,鍵入命令:ppm install dbi.ppd 10. DBI要求什麼版本的Perl? 答:Perl 5.004_04以上 11. 如何從一個字符串中過濾特別字符? 答: 用$dbh->quote()方法. quote()方法可從字符串中提取特別字符(如:引號等),然後自動加上右邊的引號. 但不能處理所有的輸入(如二進制數據).


#!/usr/local/bin use DBI; # 連接SQL服務器 .... # 從網頁表單中取得字符信息. my $string = $cgi_data{'user_input'}; $string = $dbh->quote($string); # 因為quote已經加上了右邊的引號,所以你不必在加上. my $sql_q = "SELECT * FROM $table WHERE field = $string "; 12. 有沒有可能在$sth中查出SQL語句的類型? 答:可試下這個: if ($sql_statement =~ /^s*(insertupdatedelete)/i) { # do something } elsif ($sql_statement =~ /^s*select/i) { # do something } else { # do something } 13. 如何加密一個密碼,並將來和輸入密碼向相比較? 答: 保存一個密碼(即從網頁上輸入的),首先要對密碼加密然後再把它保存在數據庫中.MySQL已經有一個加密函數來對一個字符串加密. # 連接sql server # 從表單中取得user id 和 passWord # 你可能要通過$dbh->quote()函數來確定輸入中沒有會破壞SQL語句的字符 my $insert_user = "INSERT INTO $user_table (user_id,password) VALUES('$user_id',PASSWORD('$password')"; my $insert_sth = $dbh->prepare($insert_user); $insert_sth->execute() or die "Error : $dbh->errstr"; # 檢查用戶是否輸入了正確的字符 # 注意 : 又必須先運行dbh->quote() my $check_sql = "SELECT * FROM $user_table WHERE user_id = $user_id AND passwordfield = PASSWORD('$password_entered')"; 如果你不想用Mysql的PASSWORD函數, 你可以在保存前用perl的crypt 函數來加密. 進行比較時,先對輸入密碼crypt,然後與保存在數據庫中的已加密密碼進行比較。 14. 如何在mysql中創建表 ? 答:試下這個 .. CREATE TABLE pictures( picture_id INT UNSIGNED NOT NULL AUTO_INCREMENT, category_id SMALLINT UNSIGNED NOT NULL, location VARCHAR(40), thumb VARCHAR(40), title VARCHAR(80) NOT NULL, description TINYTEXT, last_modified DATE, last_viwed DATE, view_count INT UNSIGNED, user_id VARCHAR(20) NOT NULL, colour ENUM('true','false') NOT NULL DEFAULT 'true', PRIMARY KEY (picture_id), INDEX (title), INDEX (user_id), INDEX (category_id), INDEX (colour) ); 15. 如何在M個紀錄中只列出N個,並用翻頁的方法列出其它? 答:可以采用MYSQL的LIM99v函數. 注意:下面的代碼用了cgi-lib.pl的函數來獲取網頁輸入數據. sub List_Result{ my ($user_action) = @_; my %cgi_data; &ReadParse(%cgi_data); my $limit = 10 ; my $offset = $cgi_data{'offset'}; my $printed = $cgi_data{'printed'}; my $prev_offset = $cgi_data{'prev_offset'}; my $next_action = $cgi_data{'next_action'}; my $print_cnt = 0; $new_prev_offset = $offset; #下面的代碼取得用戶的操作 if ($next_action eq "Next"){ $offset += $limit; } elsif($next_action eq "Previous"){ if ($printed < $limit){ $offset = $prev_offset; }else{ $offset -= $printed;

} } else { $offset = 0 ; } } my $SELECT ; my $LIM99v = " LIM99v $offset,$limit"; # 如果$KEEP_SQL 為空,則表示重新開始,用舊的sql語句 if ($KEEP_SQL eq ""){ if($user_action eq "list_all"){ $SELECT = "SELECT * FROM mytable "; } else{ $SELECT = "SELECT * FROM mytable WHERE rec_id = $rec_id "; } }else{ $SELECT = $KEEP_SQL; } my $SQL = $SELECT.$LIM99v; # KEEP_SQL將被保存在一個隱含的表段輸入中,這個變量保證每次都用一個sql語句. my $KEEP_SQL = $SELECT; my $sth = $dbh->prepare($SQL); $sth->execute() or die "Can't execute:"; # 做你想做的事情. print " [form method=post action=$this_cgi] ... ... 列出結果 .. [input type=hidden name=offset value=$offset] [input type=hidden name=printed value=$printed] [input type=hidden name=prev_offset value=$new_prev_offset] [input type=hidden name=user_action value=viewing_result] [input type=hidden name=KEEP_SQL value=$KEEP_SQL] "; if ($offset > 0 ) {print "[input type=submit name=next_action width=100 value="Previous"]n"; } if ($printed == $limit){ print "[input type=submit name=next_action width=100 value="Previous"n"]; } print "[/form]"; 16. 如何獲得表的字段信息? 答: #!/usr/bin/perl # connect to db my $dbh = DBI->connect(bla..bla..bla); my $sql_q = "SHOW COLUMNS FROM $table"; my $sth = $dbh->prepare($sql_q); $sth->execute; while (@row = $sth->fetchrow_array){ print"Field Type Null Key Default Extran"; print"------------------------------------



my $SQL = $SELECT.$LIM99v; # KEEP_SQL將被保存在一個隱含的表段輸入中,這個變量保證每次都用一個sql語句. my $KEEP_SQL = $SELECT; my $sth = $dbh->prepare($SQL); $sth->execute() or die "Can't execute:"; # 做你想做的事情. print " [form method=post action=$this_cgi] ... ... 列出結果 .. [input type=hidden name=offset value=$offset] [input type=hidden name=printed value=$printed] [input type=hidden name=prev_offset value=$new_prev_offset] [input type=hidden name=user_action value=viewing_result] [input type=hidden name=KEEP_SQL value=$KEEP_SQL] "; if ($offset > 0 ) {print "[input type=submit name=next_action width=100 value="Previous"]n"; } if ($printed == $limit){ print "[input type=submit name=next_action width=100 value="Previous"n"]; } print "[/form]"; 16. 如何獲得表的字段信息? 答: #!/usr/bin/perl # connect to db my $dbh = DBI->connect(bla..bla..bla); my $sql_q = "SHOW COLUMNS FROM $table"; my $sth = $dbh->prepare($sql_q); $sth->execute; while (@row = $sth->fetchrow_array){ print"Field Type Null Key Default Extran"; print"------------------------------------



Copyright © Linux教程網 All Rights Reserved