DBD :: mysql - проблема с удалением базы данных - PullRequest
2 голосов
/ 18 января 2010

Почему нет строки "$ 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

1 Ответ

3 голосов
/ 18 января 2010

Интересно, что в 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' ...) и посмотрите, что произойдет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...