如何在 Perl6 中使用 DBIish 连接到本地 MySQL Server 8.0
How to connect to local MySQL Server 8.0 with DBIish in Perl6
我正在处理一个 Perl6 项目,但无法连接到 MySQL。即使使用 DBIish(或 perl6.org 教程)示例代码,连接也会失败。任何建议或建议表示赞赏!用户凭据也已确认准确无误。
我 运行 在 Windows 10 上 MySQL Server 8.0 和标准 Perl6 与 Rakudo Star。我曾尝试以多种方式修改连接字符串,例如 :$password :password<> :password() 等,但无法建立连接。还应注意,我安装了 ODBC、C、C++、and.Net 连接器。
#!/usr/bin/perl6
use v6.c;
use lib 'lib';
use DBIish;
use Register::User;
# Windows support
%*ENV<DBIISH_MYSQL_LIB> = "C:/Program Files/MySQL/MySQL Server 8.0/liblibmysql.dll"
if $*DISTRO.is-win;
my $dbh = DBIish.connect('mysql', :host<localhost>, :port(3306), :database<dbNameHere>, :user<usernameHere>, :password<pwdIsHere>) or die "couldn't connect to database";
my $sth = $dbh.prepare(q:to/STATEMENT/);
SELECT *
FROM users
STATEMENT
$sth.execute();
my @rows = $sth.allrows();
for @rows { .print }
say @rows.elems;
$sth.finish;
$dbh.dispose;
这应该连接到数据库。然后应用程序运行查询,然后打印出每个结果行。实际发生的是应用程序每次都点击 'die' 消息。
也许 dbiish 存储库中的示例不再有效。
DBIISH_MYSQL_LIB Env 好像被NativeLibs::Searcher with commit 9bc4191
取代了
查看 NativeLibs::Searcher 可能有助于找到问题的根本原因。
这更像是一种解决方法,但无法使用数据库会造成严重后果。因此,即使在尝试使用 NativeLibs 时,我也无法通过 DBIish 建立连接。相反,我选择使用 DB::MySQL,事实证明这很有帮助。只需几行代码,该模块即可满足您的数据库需求:
use DB::MySQL;
my $mysql = DB::MySQL.new(:database<databaseName>, :user<userName>, :password<passwordHere>);
my @users = $mysql.query('select * from users').arrays;
for @users { say "user #$_[0]: $_[1] $_[2]"; }
#Results would be:
#user #1: FirstName LastName
#user #2: FirstName LastName
#etc...
这将为每个用户打印一行,格式如上所示。它不像 DBIish 那样为人熟悉,但该模块可以根据需要完成工作。您可以使用它做更多的事情,所以我强烈建议您阅读文档。
环境变量 DBIISH_MYSQL_LIB 已删除。不知道有没有人带回来
但是,如果您添加库的路径,并且文件名为 mysql.dll,它将起作用。科学方法的结果不是很好。
因此需要更多测试 - 也许
C:\Program Files\MySQL\MySQL Server 8.0\lib>mklink mysql.dll .\libmysql.dll
显然,您可以创建自己的 lib 目录并将其添加到您的路径,然后将此符号链接添加到该目录。
希望这对您有所帮助。我花了几个小时..
编辑:仍在花时间 - 稍后记账。
一些非常短暂的事情正在发生。我重置了机器(也许从现在开始总是这样做),但仍然出现丢失的 mysql.dll 错误。尝试进入 MySQL lib 目录以从那里执行 raku.. 工作。更改目录.. 无效。
启动管理员 cmd - 从主目录尝试 raku 命令。工作了。好的 - 不好,但也许是一致的。启动了非管理员 cmd,从 MySQL lib 目录尝试了它,成功了。只是为了咯咯笑,在该目录之外尝试了它..有效。
现在我无法让它不工作。将按照 Valle Lukas 的建议探索 NativeLibs::Searcher!
我正在处理一个 Perl6 项目,但无法连接到 MySQL。即使使用 DBIish(或 perl6.org 教程)示例代码,连接也会失败。任何建议或建议表示赞赏!用户凭据也已确认准确无误。
我 运行 在 Windows 10 上 MySQL Server 8.0 和标准 Perl6 与 Rakudo Star。我曾尝试以多种方式修改连接字符串,例如 :$password :password<> :password() 等,但无法建立连接。还应注意,我安装了 ODBC、C、C++、and.Net 连接器。
#!/usr/bin/perl6
use v6.c;
use lib 'lib';
use DBIish;
use Register::User;
# Windows support
%*ENV<DBIISH_MYSQL_LIB> = "C:/Program Files/MySQL/MySQL Server 8.0/liblibmysql.dll"
if $*DISTRO.is-win;
my $dbh = DBIish.connect('mysql', :host<localhost>, :port(3306), :database<dbNameHere>, :user<usernameHere>, :password<pwdIsHere>) or die "couldn't connect to database";
my $sth = $dbh.prepare(q:to/STATEMENT/);
SELECT *
FROM users
STATEMENT
$sth.execute();
my @rows = $sth.allrows();
for @rows { .print }
say @rows.elems;
$sth.finish;
$dbh.dispose;
这应该连接到数据库。然后应用程序运行查询,然后打印出每个结果行。实际发生的是应用程序每次都点击 'die' 消息。
也许 dbiish 存储库中的示例不再有效。
DBIISH_MYSQL_LIB Env 好像被NativeLibs::Searcher with commit 9bc4191
取代了查看 NativeLibs::Searcher 可能有助于找到问题的根本原因。
这更像是一种解决方法,但无法使用数据库会造成严重后果。因此,即使在尝试使用 NativeLibs 时,我也无法通过 DBIish 建立连接。相反,我选择使用 DB::MySQL,事实证明这很有帮助。只需几行代码,该模块即可满足您的数据库需求:
use DB::MySQL;
my $mysql = DB::MySQL.new(:database<databaseName>, :user<userName>, :password<passwordHere>);
my @users = $mysql.query('select * from users').arrays;
for @users { say "user #$_[0]: $_[1] $_[2]"; }
#Results would be:
#user #1: FirstName LastName
#user #2: FirstName LastName
#etc...
这将为每个用户打印一行,格式如上所示。它不像 DBIish 那样为人熟悉,但该模块可以根据需要完成工作。您可以使用它做更多的事情,所以我强烈建议您阅读文档。
环境变量 DBIISH_MYSQL_LIB 已删除。不知道有没有人带回来
但是,如果您添加库的路径,并且文件名为 mysql.dll,它将起作用。科学方法的结果不是很好。
因此需要更多测试 - 也许
C:\Program Files\MySQL\MySQL Server 8.0\lib>mklink mysql.dll .\libmysql.dll
显然,您可以创建自己的 lib 目录并将其添加到您的路径,然后将此符号链接添加到该目录。
希望这对您有所帮助。我花了几个小时..
编辑:仍在花时间 - 稍后记账。
一些非常短暂的事情正在发生。我重置了机器(也许从现在开始总是这样做),但仍然出现丢失的 mysql.dll 错误。尝试进入 MySQL lib 目录以从那里执行 raku.. 工作。更改目录.. 无效。
启动管理员 cmd - 从主目录尝试 raku 命令。工作了。好的 - 不好,但也许是一致的。启动了非管理员 cmd,从 MySQL lib 目录尝试了它,成功了。只是为了咯咯笑,在该目录之外尝试了它..有效。
现在我无法让它不工作。将按照 Valle Lukas 的建议探索 NativeLibs::Searcher!