首页 > 解决方案 > 如何在 Perl6 中使用 DBIish 连接到本地 MySQL Server 8.0

问题描述

我正在做一个 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<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;

这应该连接到数据库。然后应用程序运行一个查询,然后打印出每个结果行。实际发生的是应用程序每次都会点击“死亡”消息。

标签: mysqldbiraku

解决方案


这更像是一种解决方法,但是无法使用数据库是很严重的。因此,即使尝试使用 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 那样熟悉,但是这个模块可以根据需要完成工作。你可以用它做更多的事情,所以我强烈建议你阅读文档。


推荐阅读