Tartalomjegyzék

< Perl

Perl MySQL

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

main.pl
#!/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

main.pl
#!/usr/bin/perl
 
use DBI;
 
my $user = "root";
my $host = "localhost";
my $db 	 = "mysql";
print "Jelszó: ";
my $pass = <STDIN>;
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:

main.pl
#!/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