日期:2014-05-16  浏览次数:20520 次

perl 创建mysql数据库 DBI使用详解
例子:
#!/usr/bin/perl -w
use DBI;
#此方法创建数据库只执行一条语句
#my $dbh=DBI->connect("DBI:mysql:mysql","root","aqcxxj321");
#$dbh->func('createdb', "Lxp", 'admin');
#$dbh->func("dropdb",'Lxp2', 'admin');

#查询子类函数:DBI->available_drivers
#foreach(DBI->available_drivers){print;}
#


#数据库方法调用:DBI -> install_driver
my $drh=DBI->install_driver("mysql");
#$drh->func("createdb","Lxp" ,"localhost","root","aqcxxj321","admin");
#$drh->func("createdb","Lxp1" ,"localhost","root","aqcxxj321","admin");
#$drh->func("createdb","Lxp2" ,"localhost","root","aqcxxj321","admin");

$drh->func("dropdb", "Lxp","localhost","root","aqcxxj321",'admin');
$drh->func("dropdb", "Lxp1","localhost","root","aqcxxj321",'admin');
$drh->func("dropdb", "Lxp2","localhost","root","aqcxxj321",'admin');




perl DBI使用详解
---------------------------------
use DBI;
---------------------------------
注意:特定的DBD 级的模块不需要包括use 行,因为在与服务器进行连接时, DBI 负责激活相应的模块,比如DBD::mysql。

一、一些变量表达的常用意思
$drh表示驱动程序对象的句柄
$dbh表示针对一个数据库对象的句柄
$sth表示针对一个语句或者一个查询对象的句柄
$fh表示一个打开文件的句柄
$h表示一个通用的句柄,其含意有赖于上下文
$rc表示操作代码返回的布什值(真或假)
$rv表示操作代码返回的整数值
$rows表示操作代码返回的行数值
$str表示操作代码返回的字符串
@ary表示查询返回的一行值的数组(列表)
@row_ary表示从查询中返回的一个行的数组

二、关于DBI的一些驱动对象方法:
查询子类函数:DBI->available_drivers
比如:---------------------------
foreach(DBI->available_drivers){print;}
---------------------------------
结果:DBI::mysql
数据源函数:DBI->data_sources
比如:---------------------------
foreach(DBI->data_sources){print;}
---------------------------------
结果:对于大多数正确的驱动子类来说,返回值一般为空,对于不能连接、用户名或密码为空的驱动子类,返回值不为空
数据库方法调用:DBI -> install_driver
比如:
---------------------------------
my $drh = DBI -> install_driver("mysql");
---------------------------------
结果:提供驱动子类的句柄,可以使用$drh -> func ("createdb", $db_name, $db_host, $username, $password, "admin");来创建数据库
数据库连接:DBI -> connect
比如:---------------------------
my $dsn = "dbi:mysql:database=${db_name};hostname=${db_host};mysql_socket=${db_sock};port=${db_port};mysql_compression=1;mysql_read_default_file=$ENV{HOME}/.my.cnf;mysql_read_default_group=client";
my %attr = ( PrintError => 0, RaiseError => 0);
my $dbh = DBI -> connect ($dsn, $user_name, $password, [,\%attr]);
---------------------------------结果:返回值是针对一个数据库的句柄,提供数据库连接功能,关闭连接使用$dbh -> disconnect,其中很多参数可以省略,包括数据库名称。

三、数据库句柄方法的调用
1,do方法:
my $rows = $dbh -> do ($query[, \%attr[, @bind_values]]);
语法解释:准备并运行$query表示的查询。返回值为受影响的行数—如果不知道行数,则返回-1,如果出现错误,则返回undef。
如果受影响的行数为0,则返回值为字符串“0E0”,作为数值它与0等价,但在判断时它为真。
一般用于非SELECT查询,不检索行的语句,如DELETE、INSERT、REPLACE或UPDATE,主要使用do()。
如果对SELECT语句使用它,则不会获得返回的语句句柄,也不能提取任何行。
当语句包括占位符(在此查询字符串内部由‘?’字母表示)时,使用@bind_values。
@bind_values为给占位符赋值的值的列表。它必须和占位符有一样多的值。如果只指定赋值
的值,但没有指定属性,则将undef作为\%attr参数的值来传递。
与prepare和execute结合使用的功能基本相同。

2,ping方法:
my $rc = $dbh -> ping ();
语法解释:检查与服务器的连接是否仍然有效,并相应返回真或假。

3,prepare方法:
my $sth = $dbh -> prepare ($query[, \%attr]);
语法解释:为以后的执行所准备的由$query表示的查询,并返回一个语句句柄。返回的句柄可用于execute(),以便执行该查询。

4,quote方法:
my $str = $dbh -> quote ($value[, $data_type]);
语法解释:处理字符串以实现SQL语句中特定字符的引用和转义,以便在执行这条语句时,该字符串不引起语法错误。
例如,“‘I \’m happy’”(没有双引号)返回字符串“I ’m happy”。
如果$value为undef,则它返回字符串“NULL”(没有引号)。
一般来说,$data_type参数不是必需的,因为MySQL将查询中指定为字符串的值自动地转换为其他类型。
可以将$data_type指定为特殊类型值的提示————例如,DBI::SQL_INTEGER指出$value表示一个整数。
不要使用具有打算利用占位符插入到查询中的值的quote()。DBI会自动引用这样的值。

5,selectall_arrayref方法
my $ary_ref = $dbh -> selectall_arrayref ($query[, \%attr[, @bind_values]]);
语法解释:执行由$query指定的查询,并结合prepare()、execute()和fetchall_arrayref()返回结果。如果出现