我正在处理一个 Perl6 项目,但无法连接到 MySQL。即使使用 DBIish(或 perl6.org 教程)示例代码,连接也会失败。任何建议或建议表示赞赏!用户凭据也已确认准确无误。
我在带有 MySQL Server 8.0 的 Windows 10 和带有 Rakudo Star 的标准 Perl6 上运行它。我曾尝试以多种方式修改连接字符串,例如 :$password :password<> :password() 等,但无法建立连接。还应注意,我安装了 ODBC、C、C++ 和 .Net 连接器。
#!/usr/bin/perl6
use v6.c;
use lib 'lib';
use DBIish;
use Register::User;
# Windows support
%*ENV = "C:/Program Files/MySQL/MySQL Server 8.0/liblibmysql.dll"
if $*DISTRO.is-win;
my $dbh = DBIish.connect('mysql', :host, :port(3306), :database, :user, :password) 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;
这应该连接到数据库。然后应用程序运行查询,然后打印出每个结果行。实际发生的是应用程序每次都触发“死亡”消息。
这更像是一种解决方法,但无法使用数据库会造成严重后果。因此,即使在尝试使用 NativeLibs 时,我也无法通过 DBIish 建立连接。相反,我选择使用 DB::MySQL这被证明是非常有帮助的。只需几行代码,此模块即可满足您的数据库需求:
use DB::MySQL;
my $mysql = DB::MySQL.new(:database, :user, :password);
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 那样为人熟悉,但该模块可以根据需要完成工作。您可以用它做很多事情,所以我强烈建议您阅读文档。
Tôi là một lập trình viên xuất sắc, rất giỏi!