【服务器学院】 如何获得表的字段信息? 答: #!/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"---------------------------------------------------------------n"; print"$row[0] $row[1] $row[2] $row[3] $row[4] $row[5]n"; }
如何添加一个超级用户 ? 答: 你可以用GRANT语句: shell> mysql --user=root mysql mysql> GRANT ALL PRIVILEGES ON *.* TO monty@localhost IDENTIFIED BY ''something'' WITH GRANT OPTION; mysql> GRANT ALL PRIVILEGES ON *.* TO monty@"%" IDENTIFIED BY ''something'' WITH GRANT OPTION;
超级用户可以从任何地方连接服务器,但必须使用一个密码(''something''). 请注意我们同时对monty@localhost和monty@"%"用了GRANT语句。如果不加上 localhost,当我们(超级用户)从本机上连接时,localhost上mysql_install_db创 建的匿名用户会取得更高的优先权,因为它有更特别的Host字段值,使得在用户列 表中占据靠前的位置.
如何知道mysql服务器中所有可供使用的数据库? 答: 用data_sources($driver_name)方法,这个方法返回SQL服务器中数据库名字列表 例: $db_names = DBI->data_sources("mysql");
如何连接SQL服务器? 答: #!/usr/bin/perl use DBI; my $database_name = "db_name"; my $location = "localhost"; my $port_num = "3306"; # 这是mysql的缺省值
# 定义SQL服务器的位置. my $database = "DBI:mysql:$database_name:$location:$port_num"; my $db_user = "user_name"; my $db_password = "user_password";
# 连接. my $dbh = DBI->connect($database,$db_user,$db_password);
# 做你要做的事情.. ... ... $dbh->disconnect; $exit;
如何从SQL服务器上获取记录数据? 答: 从SQL服务器上获取记录数据,必须先连接服务器,然后提交SQL查询语句,服务器则返回结果
#!/usr/bin/perl # 连接服务器 (见22) my $sql_statement = "SELECT first_name,last_name FROM $table ORDER BY first_name"; my $sth = $dbh->prepare($sql_statement); my ($first, $last);
# 结果保存在$sth中 $sth->execute() or die "无法执行SQL语句: $dbh->errstr"; $sth->bind_columns(undef, $first, $last); my $row; while ($row = $sth->fetchrow_arrayref) { print "$first $lastn"; # 或者 print "$row->[0] $row[1]n"; }
以上的程序将列出结果中的每一行,打印出first name和last name。 这是最快的 提取数据的方法之一。
如何从服务器随机地提取记录? 答: 用mysql的LIMIT函数. $Query = "SELECT * FROM Table"; $sth = $dbh->prepare($Query); $numrows = $sth->execute; $randomrow = int(rand($numrows)); $sth = $dbh->prepare("$Query LIMIT $randomrow,1"); $sth->execute; @arr = $sth->fetchrow;
插入记录后,如何获得自动增加的主键值? 答: insertid方法是mysql特有的,也许不能在其它SQL server上工作
#!/usr/bin/perl # 连接数据库 .... my $sql_statement = "INSERT INTO $table (field1,field2) VALUES($value1,$value2)"; my $sth = $dbh->prepare($sql_statement); $sth->execute or die "无法添加数据 : $dbh->errstr";
# 现在我们可以取回刚刚插入后生成的主键. my $table_key = $sth->{insertid}; # 也可以用这种方法(标准的DBI方法) my $table_key = $dbh->{''mysql_insertid''}; $sth->finish;
执行SELECT查询以后,如何获得记录行数? 答: 有好几种方法可以做到。这是其中的一种:
# 文档中说这种方法不行,但对我来说却可以,你或许也行. my $mysql_q = "SELECT field1,field2 FROM $table WHERE field1=$value1"; my $sth = $dbh->prepare($mysql_q); my $found = $sth->execute or die "无法执行 : $dbh->errstr"; $sth->finish;
# 这是一种较慢的方法,而且做SELECT查询时还不太可靠. my $sql = q(select * from $table where field = ? ); my $sth = $dbh->prepare($sql); $sth->execute(''$value''); my $rows = $sth->rows; $sth->finish;
# 这是一种较快的方法. my $sql = q(select count(*) from $table where field = ? ); my $sth = $dbh->prepare($sql); $sth->execute(''$value''); my $rows = $sth->fetchrow_arrayref->[0]; $sth->finish;
(编辑:ASP站长网)
|