当前位置:Linux教程 - Linux综合 - DBI/MYSQL FAQ

DBI/MYSQL FAQ

  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()方法可从字符串中提取特别字符(如:引号等),然后自动加上右边的引号. 但不能处理所有的输入(如二进制数据).
[1] [2] [3] 下一页 

#!/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;
上一页 [1] [2] [3] 下一页 

} } 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"------------------------------------

(出处:http://www.sheup.com)


上一页 [1] [2] [3] 

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"------------------------------------

(出处:http://www.sheup.com/)


上一页 [1] [2] [3] [4]