如何在Perl6中使用DBIish连接到本地MySQL Server 8.0

时间:2019-01-18 04:59:21

标签: mysql dbi perl6

我正在研究Perl6项目,但是很难连接到MySQL。即使使用DBIish(或perl6.org教程)示例代码,连接也会失败。任何建议或意见,不胜感激!用户凭据也被确认正确。

我正在Windows 10上使用MySQL Server 8.0和带有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;

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

2 个答案:

答案 0 :(得分:2)

也许dbiish存储库中的示例不再有效。

DBIISH_MYSQL_LIB Env似乎已由NativeLibs::Searcher替换为提交9bc4191

查看NativeLibs :: Searcher可能有助于查找问题的根本原因。

答案 1 :(得分:2)

这更多的是变通方法,但是无法使用DB会造成严重后果。因此,即使尝试使用NativeLib,我也无法通过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那样熟悉,但是该模块可以根据需要完成工作。您可以使用它做更多的事情,因此我强烈建议您阅读文档。