DBI modul hiba MySQL esetén

DBI modul hiba MySQL esetén
2012-11-19T13:00:57+01:00
2012-11-20T00:16:38+01:00
2022-11-27T11:41:59+01:00
johnnyvj
Sziasztok!
Vígan használom a DBI modult már egy ideje Linux alól indítva. Most át kell költöznöm egy Win2008 alá telepített ActivePerl (64 bites) alá. S ekkor futottam össze az alábbi hibajelenséggel:

use English; use strict; use DBI(); my $dbh = DBI->connect("DBI:mysql:database=".$Parameter{"MySqlDatabase"}.";host=".$Parameter{"MySqlHost"}, $Parameter{"MySqlUser"}, $Parameter{"MySqlPsw"});

Erre jön a nyafogás:
install_driver(mysql) failed: Can't locate DBD/mysql.pm in @INC (@INC contains:
C:/Perl64/site/lib C:/Perl64/lib .) at (eval 5) line 3.
Perhaps the DBD::mysql perl module hasn't been fully installed,
or perhaps the capitalisation of 'mysql' isn't right.
Available drivers: CSV, DBM, ExampleP, File, Gofer, ODBC, Oracle, Pg, Proxy, SQL
ite, Sponge.
at C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\index.pl
line 15.

Ha itthon (ahol 32 bites XP alatt és szintén ActivePerl alól futtatom (Amire eddig nem volt példa, mert nem volt rá szükségem), akkor pedig ezt mondja:
install_driver(mysql) failed: Can't locate DBD/mysql.pm in @INC (@INC contains:
C:/perl/site/lib C:/perl/lib .) at (eval 5) line 3.
Perhaps the DBD::mysql perl module hasn't been fully installed,
or perhaps the capitalisation of 'mysql' isn't right.
Available drivers: CSV, DBM, ExampleP, File, Gofer, ODBC, Oracle, Pg, Proxy, SQL
ite, Sponge.
at c:\perl\index.pl line 16.

Vagyis detto :(
Megnéztem a CPAN-on a DBI-t, leszedtem, de tökre ugyanazon csomagokat tartalmazza, mint amik az itthoni vagy a 64-bites Perl alatt megtalálhatók.

Mi a megoldás?
Mutasd a teljes hozzászólást!
Activeperl es PPM is megy offline:

windows - How can I install package in ActivePerl without Internet connection? - Stack Overflow

5.14 vagy ujabb perl
ppm.bat install MIME-Lite-3.028.ppmx

barmely:


I am sure there is an easier way, but I just checked a ppd file and it is just an xml file ...

So you should be able to do the following if you want to install manually on a pc with no connection:

Open the file , ex

http://trouchelle.com/ppm/Acme-LOLCAT.ppd

and download the appropriate file pointed to in the CODEBASE tag, in this case:

http://trouchelle.com/ppm/MSWin32-x86-multi-thread-5.8/Acme-LOLCAT-0..

Put both file on the pc with no connection, CODEBASE HREF="xxx" should be pointing to the zip file (either by putting the file in the same relative subfolder or by fixing the href so it points to the zip file on your disk)

Install from the ppd using

ppm install x.ppd




Mutasd a teljes hozzászólást!

  • Ok, közben már rá kellett jönnöm, hogy megint hamarabb járt a "szám", mint az eszem.
    Találtam a CPAN-on egy szerintem erre a célra való modult:
    DBD::mysql
    Ezzel nincs is baj addig, amíg ugye a net rendelkezésemre áll, mert az ActivePerl ppm-je simán LESZEDI és beintegrálja a helyére a modult. Ám annál a cégnél, ahol majd ugyanezt meg kell tennem, nem lesz net. Legalábbis nem jellemző, hogy ideadják a hozzáférést :(
    Ha ilyen eset van, akkor miképp tudom a leszedett csomagot feltenni?
    Mutasd a teljes hozzászólást!
  • Addig is, amíg meglenne majd a net nélküli telepítés, gondoltam, kipróbálom, hogy itthon felteszem a cpan.bat segítségével ezt a modult. Az agyam eldobom. Minek a telepítőnek mysql kapcsolat ahhoz, hogy lefordítson és telepítsen egy ilyen modult? :o
    Ugyanis szépen elindul a telepítés ám egyszer csak közli, hogy ő biza nem találja a mysqladmin.exe-t sehol és ezért nem tudja befejezni a telepítést
    Mutasd a teljes hozzászólást!
  • Szóval, nem haladok a DBI::mysql telepítésével.
    Elolvastam a telepítési instrukciókat.
    Próbálom az első lépést:
    perl Makefile.PL --testuser=root --testpassword=xxxx
    Válasz:
    Set up gcc environment - gcc.exe (rubenvb-4.5.4) 4.5.4
    'sprintf' is not recognized as an internal or external command,
    operable program or batch file.
    Problem running C:\PROGRA~1\MySQL\MYSQLS~1.5\bin\MYSQLA~1.EXE - aborting ...

    Ha a megadott adatokkal próbálom meg elindítani a mysql-t, akkor természetesen bejutok.
    Most akkor mi a hiba a fentiekben?

    Egyetlen helyen van sprintf függvény a Makefil.PL-ben:

    $mysqladmin = Win32::GetShortPathName($mysqladmin); my $v; if ( defined $opt->{'testuser'} and defined $opt->{'testpassword'}) { $v = qx( sprintf('%s --user=%s --password=%s version', $mysqladmin , $opt->{'testuser'}, $opt->{'testpassword'}) ); } else { $v = qx($mysqladmin version); } unless ($v) { print STDERR "Problem running $mysqladmin - aborting ...\n"; exit(1); }
    Betettem a sprintf-es sor elé, hogy jelenítse már meg nekem a $mysqladmin, a $opt->{'testuser'} és a $opt->{'testpassword'} értékeit. Korrektek. Ha manuálisan próbálom futtatni a fenti parancsot, akkor természetesen lefut a mysqladmin.exe és visszaadja a szükséges 'version' információt, ami jelen esetben ez:
    C:\PROGRA~1\MySQL\MYSQLS~1.5\bin\MYSQLA~1.EXE Ver 8.42 Distrib 5.5.28, for Win6
    4 on x86
    Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.

    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.

    Server version 5.5.28
    Protocol version 10
    Connection localhost via TCP/IP
    TCP port 3306
    Uptime: 8 hours 25 min 25 sec

    Threads: 1 Questions: 5 Slow queries: 0 Opens: 33 Flush tables: 1 Open tabl
    es: 0 Queries per second avg: 0.000

    Úgyhogy nagyon kezd már elegem lenni.
    Mutasd a teljes hozzászólást!
  • Nos, kiszúrtam a Makefile.PL-el és az sprintf-es sort lecseréltem a fentebbi tartalommal manuálisan.
    Vagyis ott most az szerepel, hogy

    $v="sablabla\nslbla...";

    Na, ekkor már sikerül lefutnia, a végén ezen sorokkal fejezi be:
    Checking if your kit is complete...
    Looks good
    Note (probably harmless): No library found for -lmysqlclient
    Note (probably harmless): No library found for -lzlib
    Note (probably harmless): No library found for -lkernel32
    Note (probably harmless): No library found for -luser32
    Note (probably harmless): No library found for -lgdi32
    Note (probably harmless): No library found for -lwinspool
    Note (probably harmless): No library found for -lcomdlg32
    Note (probably harmless): No library found for -ladvapi32
    Note (probably harmless): No library found for -lshell32
    Note (probably harmless): No library found for -lole32
    Note (probably harmless): No library found for -loleaut32
    Note (probably harmless): No library found for -lnetapi32
    Note (probably harmless): No library found for -luuid
    Note (probably harmless): No library found for -lws2_32
    Note (probably harmless): No library found for -lmpr
    Note (probably harmless): No library found for -lwinmm
    Note (probably harmless): No library found for -lversion
    Note (probably harmless): No library found for -lodbc32
    Note (probably harmless): No library found for -lodbccp32
    Note (probably harmless): No library found for -lcomctl32
    Note (probably harmless): No library found for -lmsvcrt
    Using DBI 1.622 (for perl 5.016001 on MSWin32-x64-multi-thread) installed in C:/
    Perl64/lib/auto/DBI/
    Writing Makefile for DBD::mysql
    Writing MYMETA.yml and MYMETA.json


    És létrejön a makefile.
    Mutasd a teljes hozzászólást!
  • Mivel nincs make-em, ezért egy dmake parancs segítségével kiadom a "dmake" parancsot :)
    És íme a végeredmény:
    C:\Perl64\site\bin\dlltool.exe --def mysql.def --output-exp dll.exp
    C:\Perl64\bin\perl.exe myld C:\Perl64\site\bin\g++.exe -o blib\arch\auto\DBD\mys
    ql\mysql.dll -Wl,--base-file -Wl,dll.base -mdll -L"C:\Perl64\lib\CORE" dbdimp.o
    mysql.o C:\Perl64\lib\CORE\perl516.lib -lkernel32 -luser32 -lgdi32 -lw
    inspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -lnetapi32 -luuid -lw
    s2_32 -lmpr -lwinmm -lversion -lodbc32 -lodbccp32 -lcomctl32 -lmsvcrt dll.exp
    dbdimp.o: In function `mysql_dr_connect':
    c:\Perl64\install\DBD-mysql-4.022/dbdimp.c:1663: undefined reference to `mysql_i
    nit'
    c:\Perl64\install\DBD-mysql-4.022/dbdimp.c:1892: undefined reference to `mysql_r
    eal_connect'
    c:\Perl64\install\DBD-mysql-4.022/dbdimp.c:1685: undefined reference to `mysql_o
    ptions'
    c:\Perl64\install\DBD-mysql-4.022/dbdimp.c:1694: undefined reference to `mysql_o
    ptions'
    c:\Perl64\install\DBD-mysql-4.022/dbdimp.c:1704: undefined reference to `mysql_o
    ptions'
    c:\Perl64\install\DBD-mysql-4.022/dbdimp.c:1715: undefined reference to `mysql_o
    ptions'
    c:\Perl64\install\DBD-mysql-4.022/dbdimp.c:1726: undefined reference to `mysql_o
    ptions'
    dbdimp.o:c:\Perl64\install\DBD-mysql-4.022/dbdimp.c:1809: more undefined referen
    ces to `mysql_options' follow
    dbdimp.o: In function `mysql_db_login':
    c:\Perl64\install\DBD-mysql-4.022/dbdimp.c:2057: undefined reference to `mysql_s
    qlstate'
    c:\Perl64\install\DBD-mysql-4.022/dbdimp.c:2057: undefined reference to `mysql_e
    rror'
    c:\Perl64\install\DBD-mysql-4.022/dbdimp.c:2057: undefined reference to `mysql_e
    rrno'

    [...]

    collect2: ld returned 1 exit status
    dmake.exe: Error code 129, while making 'blib\arch\auto\DBD\mysql\mysql.dll'

    Szerintem elkezdek ácsolni egy akasztófát :(
    Mutasd a teljes hozzászólást!
  • Hello,

    Valóban DBD:mysql kell neki.

    Ahhoz hogy windows alatt Perl-hez telepits XS kodot tartalmazo cuccot, ahhoz fordító+az összesfüggő dolog fejlesztoi verzioja kell, hogy linkelni tudd.

    "As in the case of the header files, the client library is typically not installed by default. On Windows you will need to select them while running the MySQL setup program (Custom installation)."

    Vagyis az adott gépen fel kell hogy legyen telepítve a mysql-hez a header fájloknak is...

    A PPM a nyero, mert binaris, lefordított kodott csak kicsomagolja es leteszteli.



    Innet lopva: INSTALL - How to install and configure DBD::mysql

    perl Makefile.PL -IC:\mysql\include -LC:\mysql\lib -lmysqlclient


    Esetleg megprobálhatod az offline cpan install-t strawberry perl-l: CPAN - search.cpan.org


    Mutasd a teljes hozzászólást!
  • Activeperl es PPM is megy offline:

    windows - How can I install package in ActivePerl without Internet connection? - Stack Overflow

    5.14 vagy ujabb perl
    ppm.bat install MIME-Lite-3.028.ppmx

    barmely:


    I am sure there is an easier way, but I just checked a ppd file and it is just an xml file ...

    So you should be able to do the following if you want to install manually on a pc with no connection:

    Open the file , ex

    http://trouchelle.com/ppm/Acme-LOLCAT.ppd

    and download the appropriate file pointed to in the CODEBASE tag, in this case:

    http://trouchelle.com/ppm/MSWin32-x86-multi-thread-5.8/Acme-LOLCAT-0..

    Put both file on the pc with no connection, CODEBASE HREF="xxx" should be pointing to the zip file (either by putting the file in the same relative subfolder or by fixing the href so it points to the zip file on your disk)

    Install from the ppd using

    ppm install x.ppd




    Mutasd a teljes hozzászólást!
  • Mutasd a teljes hozzászólást!
  • Nagyon köszönöm segítségedet!
    Hálám örökké üldözni fog!

    Amúgy, kipróbáltam, ha lementem a mostani Perl64 könyvtárat (a feltelepített modulokkal egyetemben), majd leszedem az ActivePerl-t és visszatelepítve kicsomagolom rá az elmentett cuccokat, akkor is működik!
    Mutasd a teljes hozzászólást!
  • A mégteljesebb kép kedvéért, és mert érdekel van-e valami tapasztalatod ezekkel:

    local::lib
    Perlbrew

    Üdv: Mijo
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd