mysql - 如何在 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;
这应该连接到数据库。然后应用程序运行一个查询,然后打印出每个结果行。实际发生的是应用程序每次都会点击“死亡”消息。
解决方案
这更像是一种解决方法,但是无法使用数据库是很严重的。因此,即使尝试使用 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 那样熟悉,但是这个模块可以根据需要完成工作。你可以用它做更多的事情,所以我强烈建议你阅读文档。
推荐阅读
- tensorflow - 在实现“快速权重”时手动更新自定义层中的矩阵的问题
- c# - 如何使用高级安装程序在不删除客户端数据库的情况下更新我的应用程序版本
- c# - Unity - 通过抵消重力创造一辆气垫车
- swift - 编译器无法在 SwiftUI 中的合理时间内对该表达式进行类型检查
- python - 绘制按特定日期范围分组的每列平均值
- java - 在 Windows 10 上使用 Intellij IDEA 在 WSL 2 中运行和调试 Java
- objective-c - 错误:不再支持手动将 rootViewController 的视图添加到视图层次结构中
- r - R-根据其他列中的非空行合并多列中的可变行数
- c# - 为什么我的 BackgroundService 立即停止?
- android - Android解析具有未知属性名称的json列表