Как подключиться к локальному MySQL Server 8.0 с DBIish в Perl6 - PullRequest
0 голосов
/ 18 января 2019

Я работаю над проектом Perl6, но испытываю трудности с подключением к MySQL. Даже при использовании примера кода DBIish (или учебника perl6.org) соединение не устанавливается. Любые предложения или советы приветствуются! Учетные данные также были подтверждены.

Я запускаю это на Windows 10 с MySQL Server 8.0 и стандартным Perl6 с Rakudo Star. Я пытался изменить строку подключения несколькими способами, такими как: $ 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 голосов
/ 04 февраля 2019

Это скорее обходной путь, но невозможность использования базы данных наносит вред. Поэтому даже при попытке использовать 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, но этот модуль выполняет работу по мере необходимости. С ним можно сделать гораздо больше, поэтому я настоятельно рекомендую прочитать документы.

0 голосов
/ 19 января 2019

Возможно, пример в репозитории dbiish больше не действителен.

DBIISH_MYSQL_LIB Env, похоже, заменен на NativeLibs :: Searcher с коммитом 9bc4191

Просмотр NativeLibs :: Searcher может помочь найти основную причину проблемы.

...