[[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