设为首页 收藏本站
查看: 798|回复: 0

[经验分享] Perl数据库DBI接口简介【转载】

[复制链接]

尚未签到

发表于 2015-12-27 17:19:24 | 显示全部楼层 |阅读模式
  本文转载自:http://blog.csdn.net/like_zhz/article/details/5441946
  ##########################################################################
可移植的DBI方法:
connect    建立到一个数据库服务器的连接
disconnect   断开数据库服务器的连接
prepare    准备执行一个SQL语句
execute    执行准备好的语句
do    准备并执行一个SQL语句
quote    加引号于要插入的字符串或BLOB值
fetchrow_array   作为一个字段数组取出下一行
fetchrow_arrayref  作为一个字段的引用数组取出下一行
fetchrow_hashref  作为一个哈希表的引用取出下一行
fetchall_arrayref  作为一个字段数组取出所有数据
finish    完成一条语句并且让系统释放资源
rows    返回受影响的行数
data_sources   返回可在localhost上得到的数据库的数组
ChopBlanks   控制fetchrow_*方法是否剥去空格
NUM_OF_PARAMS   在准备的语句中的占位(placeholder-参数)的数目
NULLABLE   其列可以是NULL
trace    执行调试跟踪
##########################################################################
$dbh 数据库句柄
$sth 语句句柄
$rc 返回代码(经常是一个状态)
$rv 返回值(经常是一个行数)
##########################################################################
①connect($data_source, $username, $password)
使用connect方法使得一个数据库连接到数据源。$data_source值应该以DBI:driver_name:开始。以DBD::mysql驱动程序使用connect的例子:
  $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);
  ②disconnect
disconnect方法从数据库断开数据库句柄。它一般就在你从程序退出之前被调用。范例:
  $rc = $dbh->disconnect;
    prepare($statement)
准备一条由数据库引擎执行的SQL语句并且返回语句句柄($sth),你可以使用它调用execute方法。一般地你借助于prepare和execute来处理SELECT语句(和类SELECT语句,例如SHOW、DESCRIBE和EXPLAIN)。范例:
  $sth = $dbh->prepare($statement)
      or die "Can't prepare $statement: $dbh->errstr/n";
③execute
execute方法执行一个准备好的语句。对非SELECT语句,execute返回受影响的行数。如果没有行受影响,execute返回"0E0",Perl将它视作零而不是真。对于SELECT语句,execute只是在数据库中启动SQL查询;你需要使用在下面描述的fetch_*方法之一检索数据。范例:
  $rv = $sth->execute
            or die "can't execute the query: $sth->errstr;
④do($statement)
do方法准备并且执行一条SQL语句并且返回受影响的行数。如果没有行受到影响,do返回"0E0",Perl将它视为零而不是真。这个方法通常用于事先无法准备好(由于驱动程序的限制)或不需要执行多次(插入、删除等等)的非SELECT语句。范例:
  $rv = $dbh->do($statement)
          or die "Can't execute $statement: $dbh- >errstr/n";
⑤quote($string)
quote方法被用来“转义”包含在string中的任何特殊字符并增加所需的外部的引号。范例:
  $sql = $dbh->quote($string)
⑥fetchrow_array
这个方法取下一行数据并且作为一个字段值数组返回它。范例:
  while(@row = $sth->fetchrow_array) {
          print qw($row[0]/t$row[1]/t$row[2]/n);
  }
⑦fetchrow_arrayref
这个方法取下一行数据并且作为一个对一个字段值数组的引用返回它。范例:
  while($row_ref = $sth->fetchrow_arrayref) {
          print qw($row_ref->[0]/t$row_ref->[1]/t$row_ref->[2]/n);
  }
⑧fetchrow_hashref
这个方法取一行数据并且返回包含字段名/值对的一个哈希表的一个引用。这个方法不如使用上述数组引用那样有效。范例:
  while($hash_ref = $sth->fetchrow_hashref) {
          print qw($hash_ref->{firstname}/t$hash_ref->{lastname}/t/
                  $hash_ref- > title}/n);
  }
⑨fetchall_arrayref
这个方法被用来获得从SQL语句被返回的所有数据(行)。它返回一个数组的引用,该数组包含对每行的数组的引用。你用一个嵌套循环来存取或打印数据。范例:
  my $table = $sth->fetchall_arrayref
                  or die "$sth->errstr/n";
  my($i, $j);
  for $i ( 0 .. $#{$table} ) {
          for $j ( 0 .. $#{$table->[$i]} ) {
                  print "$table->[$i][$j]/t";
          }
          print "/n";
  }
⑩finish
便名没有更多的数据将从这个语句句柄取出。你调用这个方法释放语句句柄和任何与它相关的系统资源。范例:
  $rc = $sth->finish;
⑪rows
返回由最后一条命令改变(更新、删除等)的行数。这通常用在非SELECT的execute语句之后。范例:
  $rv = $sth->rows;
⑫NULLABLE
返回一个对一个布尔值数组的引用;对数组的每个成员,一个TRUE值表示该列可以包含NULL值。范例:
  $null_possible = $sth->{NULLABLE};
⑬NUM_OF_FIELDS
这个属性表明由一条SELECT或SHOW FIELDS语句返回的字段数目。你可以用它检查一条语句是否返回了结果:一个零值表明一个象INSERT、DELETE或UPDATE的非SELECT语句。范例:
  $nr_of_fields = $sth->{NUM_OF_FIELDS};
⑭data_sources($driver_name)
这个方法返回一个数组,它包含在主机'localhost'上的MySQL服务器可得到的数据库名。范例:
  @dbs = DBI->data_sources("mysql");
⑮ChopBlanks
这个属性确定fetchrow_*方法是否将去掉返回值的头和尾的空白。范例:
  $sth->{'ChopBlanks'} =1;
trace($trace_level)
 
⑯trace($trace_level, $trace_filename)
trace方法开启或关闭跟踪。当作为一个DBI类方法调用时,它影响对所有句柄的跟踪。当作为一个数据库或语句句柄方法调用时,它影响对给定句柄的跟踪(和句柄的未来子孙)。设置$trace_level为2以提供详细的踪迹信息,设置$trace_level为0以关闭跟踪。踪迹输出缺省地输出到标准错误输出。如果指定$trace_filename,文件以添加模式打开并且所有跟踪的句柄的手被写入该文件。范例:
  DBI->trace(2);                # trace everything
  DBI->trace(2,"/tmp/dbi.out"); # trace everything to /tmp/dbi.out
  $dth->trace(2);               # trace this database handle
  $sth->trace(2);               # trace this statement handle
你也可以通过设置DBI_TRACE环境变量开启DBI跟踪。将它设置为等价于调用DBI->(value)的数字值,将它设置为等价于调用DBI->(2,value)的路径名。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-157126-1-1.html 上篇帖子: 小时代5-perl调用外部命令awk的方法 下篇帖子: perl-以tab分割的文件输出
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表