[[oktatas:programozás:perl|< Perl]] ====== Perl MySQL ====== * **Szerző:** Sallai András * Copyright (c) Sallai András, 2011, 2012, 2014, 2021 * Licenc: GNU Free Documentation License 1.3 * Web: https://szit.hu ===== DBI ===== A Perl DBI a DataBase Interface betűszavai. Többféle adatbázis típushoz ad számunkra használati felületet. (A PHP5.0-tól ehhez hasonló a PDO) ===== Példa 01 ===== #!/usr/bin/perl use DBI; my $host = "localhost"; my $database = "mysql"; my $user = "usernev"; my $pw = "titok"; my $port = 3036; my $dsn = "DBI:mysql:database=$database;host=$host;port=$port"; my $dbh = DBI->connect($dsn, $user, $pw); $sth = $dbh->prepare("SELECT * FROM user"); $sth->execute; $numRows = $sth->rows; print $numRows."\n"; while (my $ref = $sth->fetchrow_hashref()) { print "Sor: id = $ref->{'User'}, Név = $ref->{'Host'}\n"; } $sth->finish; ===== MySQL - Perl idézőjel probléma ===== # Új tábla létrehozása 'foo' $dbh->do("CREATE TABLE foo (id INTEGER, name VARCHAR(20))"); # Adatok beszúrása a táblába. Így hivatkozunk a névre: $dbh->quote() $dbh->do("INSERT INTO foo VALUES (1, " . $dbh->quote("Tim") . ")"); # Ugyanaz, de de helyettesítőkaraktereket használunk $dbh->do("INSERT INTO foo VALUES (?, ?)", undef, 2, "Jochen"); ===== Részpéldák ===== Kapcsolódás adatbázishoz: use DBI; $dbh = DBI->connect('DBI:mysql:databasename', 'username', 'password' ) || die "Could not connect to database: $DBI::errstr"; # (insert query examples here...) $dbh->disconnect(); Kapcsolódás másik géphez:: $dbh = DBI->connect('DBI:mysql:databasename;host=db.example.com', 'username', 'password', { RaiseError => 1 } ); Egyszerű lekérdezés: $dbh->do('CREATE TABLE exmpl_tbl (id INT, val VARCHAR(100))'); $dbh->do('INSERT INTO exmpl_tbl VALUES(1, ?)', undef, 'Hello'); $dbh->do('INSERT INTO exmpl_tbl VALUES(2, ?)', undef, 'World'); $c = $dbh->do('DELETE FROM exmpl_tbl WHERE id=1'); print "Deleted $c rows\n"; (Nem használd a $dbh->do() formát a SELECT utasításhoz, mert az nem ad vissza értéket.) Tipikus kérés: $sth = $dbh->prepare('SELECT val FROM exmpl_tbl WHERE id=1'); $sth->execute(); $result = $sth->fetchrow_hashref(); print "Value returned: $result->{val}\n"; Kérés helyettesítő-karakterekkel: $sth = $dbh->prepare('SELECT id FROM exmpl_tbl WHERE val=?', undef, 'World'); @result = $sth->fetchrow_array(); print "ID of World is $result[0]\n"; Futtatás és kinyerés egy parancsban: $sth = $dbh->prepare('SELECT * FROM exmpl_tbl'); $results = $dbh->selectall_hashref('SELECT * FROM exmpl_tbl', 'id'); foreach my $id (keys %$results) { print "Value of ID $id is $results->{$id}->{val}\n"; } ===== Lekérés, hibakeresés ===== #!/usr/bin/perl use DBI; my $user = "root"; my $host = "localhost"; my $db = "mysql"; print "Jelszó: "; my $pass = ; chop($pass); my $sql = "show tables"; my $dbh = DBI->connect("DBI:mysql:$db:$host", $user, $pass); my $res = $dbh->prepare($sql) or die "A $sql nem megfelelő: $dbh->errstr\n"; my $rv = $res->execute or die "Sikertelen lekérés: $res->errstr\n"; while(@row = $res->fetchrow_array()) { print $row[0]."\n"; } my $rc = $res->finish; my $rc = $dbh->disconnect; ===== UTF-8 MySQL ===== Ha a mező és táblanevekben vannak ékezetesek, ezekre szükségünk lesz: $dbh->{'mysql_enable_utf8'} = 1; $dbh->do('SET NAMES utf8'); Esetleg bővebben: #!/usr/bin/perl use DBI; use strict; use warnings; use utf8; binmode(STDIN, ":utf8"); binmode(STDOUT, ":utf8"); my $user = "root"; my $host = "localhost"; my $db = "gv"; print "Jelszó: "; #eof() ? exit : binmode(ARGV, ":utf8"); my $pass = <>; chop($pass); my $sql = "select gondviselo from 10a"; my $dbh = DBI->connect("DBI:mysql:$db:$host", $user, $pass); $dbh->do("SET NAMES utf8"); $dbh->do("SET CHARACTER SET utf8"); $dbh->{'mysql_enable_utf8'} = 1; my $res = $dbh->prepare($sql); $res->execute; while(my @row = $res->fetchrow_array()) { print $row[0]."\n"; } $res->finish; $dbh->disconnect; ===== Telepítés Debian GNU/Linux ===== apt install libdbd-mysql-perl ===== Linkek ===== * http://search.cpan.org/~capttofu/DBD-mysql-4.022/lib/DBD/mysql.pm * http://sql-info.de/mysql/examples/Perl-DBI-examples.html * http://www.tizag.com/perlT/perlmysqlquery.php * http://www.tizag.com/perlT/perlmysqlmodule.php * http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/perl_unicode_en