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)
#!/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;
# Ú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");
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"; }
#!/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;
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;
apt install libdbd-mysql-perl