mysql - DBD::mysql - 删除数据库时出现问题

标签 mysql perl

为什么行“$rc = $dbh->func( 'dropdb', $dbname, 'admin' );”删除数据库 db_test_2?

#!/usr/bin/perl
use warnings;
use strict;
use 5.010;
use DBI;

my $host = 'localhost';
my $user = 'user';
my $password = 'password';
my( $rc, $dbname, @databases );



my $drh = DBI->install_driver( 'mysql' );
$dbname = 'db_test_1';

# use a driver handle (drh)

$rc = $drh->func( 'createdb', $dbname, $host, $user, $password, 'admin' );
say for DBI->data_sources( $driver, { host => $host, user => $user, password => $password });
# DBI:mysql:information_schema
# DBI:mysql:db_test_1
# DBI:mysql:mysql


$rc = $drh->func( 'dropdb', $dbname, $host, $user, $password, 'admin' );
say for DBI->data_sources( $driver, { host => $host, user => $user, password => $password });
# DBI:mysql:information_schema
# DBI:mysql:mysql



my $dbh = DBI->connect( "DBI:mysql:", $user, $password, { RaiseError=>1, AutoCommit=>1 } );
$dbname = 'db_test_2';

# reuse the existing connection of a database handle (dbh)

$rc = $dbh->func( 'createdb', $dbname, 'admin' );
say for DBI->data_sources( $driver, { host => $host, user => $user, password => $password });
# DBI:mysql:information_schema
# DBI:mysql:db_test_2
# DBI:mysql:mysql

$rc = $dbh->func( 'dropdb', $dbname, 'admin' );
say for DBI->data_sources( $driver, { host => $host, user => $user, password => $password });
# DBI:mysql:information_schema
# DBI:mysql:db_test_2
# DBI:mysql:mysql

最佳答案

有趣的是,在 DBI func() 中它的定义不同,但是 DBD::MySQL 有一个令人信服的方法来证明什么是真正的 _admin_internal 方法,它是在 Mysql.xs 中定义的,看起来有很多对 do_error() 的调用,这让我相信您应该检查错误。尝试使用 RaiseError => 1 连接并查看其内容。

为此,请连接

  $dbh = DBI->connect("DBI:mysql:database=$db;host=$host",
                      $user, $password, {RaiseError => 1});

然后使用 $dbh->func('dropdb' ...),看看会发生什么。

关于mysql - DBD::mysql - 删除数据库时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2088570/

相关文章:

perl - 使用 'say' 的奇怪输出

mysql - 按月分组 Rails ruby

java - (JDBC) 带有 if 语句和多个条件的 Mysql 查询

mysql - 允许引用完整性更新和删除

ajax - 如何通过 Ajax 或 CGI 获取 Perl Unicode 字符串输入的长度?

perl - (空?)readline 的返回未被控制结构捕获

mysql - Cakephp 3.x 自定义查询分页

php - 从 Android 应用程序访问 MySQL 中的另一个数据库

Perl OOP 属性操作最佳实践

perl - 通过ssh执行perl替换[shell脚本中的perl one-liner]