[ Zoran Rašković @ 05.03.2001. 18:58 ] @
Uz pomoc cega se poziva mySQL iz perla i na koji nacin? Ja sam cuo za DBI i tako nesto ali ne znam kako se to ostvaruje ?
[ UroS @ 05.03.2001. 19:16 ] @
evo ti jedan primer...

#! /usr/local/bin/perl
#############################################
# (C)2000 by UroS, [email protected]
# PerlDBI -> MySQL Guestbook
#############################################

use DBI;

my () = "DBI:mysql:TvojaBaza:Tvoj.Host.Domain";
my () = "TvojUsername";
my () = "TvojPassword";
my (, , , , );
my (@ary);

print ("Content-type: text/htmlnn");

= DBI->connect(, , , { RaiseError => 1 });

= ("SELECT name, email, message, timestamp, ip_address FROM main_guestbook ORDER BY timestamp LIMIT 30");
();

while (@ary = ())
{
(, , , , ) = @ary;
=~ s!(....)(..)(..)(..)(..)(..)!$3.$2.$1!;
print qq{<tr> };

if ( ne "") {
print qq{ <td width="19%"><a href="mailto:"></a></td> };
}
else
{
print qq{ <td width="19%"></td> };
}

print qq{
<td width="51%"></td>
<td width="16%"></td>
<td width="14%" align="center"><a href="#" onClick="javascript:ipshow()">*recorded</a></td>
</tr>};

}

();
();

exit (0);


[Ovu poruku je menjao UroS dana 03-05-2001 u 08:16 PM GMT]
[ Zoran Rašković @ 05.03.2001. 19:17 ] @
kad bi malo objasnio kod, bilo bi veoma lepo
[ Gojko Vujovic @ 05.03.2001. 19:35 ] @
Instaliras DBI, instaliras drajver za bazu koju hoces da koristis (u ovom slucaju DBD::MySQL).

Evo ti onda i primer koda, ali procitaj obavezno perldoc entry za DBI posto je bas fino napisan!

Ovo nije bas skolski pisan code ali radio je na tom sajtu za koji je pravljen.. inace samo dovlaci nesto iz baze i stavlja u tabelu.. shvatices lako je:

Code:

#! /usr/local/bin/perl

use DBI;
use strict;

my ($dsn) = "DBI:mysql:ime_baze:server.com";
my ($username) = "username";
my ($password) = "password";
my ($dbh, $sth, $id, $text, $timestamp, $thelink, $oldtimestamp, $timestamp2, $count);
my (@ary);
my ($section) = 1;


print ("Content-type: text/htmlnn");

$dbh = DBI->connect($dsn, $username, $password, { RaiseError => 1 });

$sth = $dbh->prepare ("SELECT link_id, link_text, link_time, link_link FROM main_links WHERE link_type=$section ORDER BY link_id DESC LIMIT 20");
$sth->execute();
$count = 0;
while (@ary = $sth->fetchrow_array())
{
        ($id, $text, $timestamp, $thelink) = @ary;
        
#        $text =~ s!(.{70})(.{70})(.{70})(.{70})(.{70})!$1<br>$2<br>$3<br>$4<br>$5<br>!;

#        $timestamp =~ s!(....)(..)(..)(..)(..)(..)!$4:$5:$6<br>$3/$2/$1!;

$timestamp =~ s!(....)(..)(..)(..)(..)(..)!$3.$2.$1!;

if ($timestamp eq $oldtimestamp) {
  $timestamp2 = ""
}
else
{
  $timestamp2 = $timestamp;
}

$oldtimestamp = $timestamp;

        print qq{
        <tr>
        <td width="50"> </td>
        <td width="358"><a href="$thelink" target="_blank">$text</a></td>};

if ($timestamp2 ne "") {
print qq{
        <td width="53" bgcolor="#828282">$timestamp2</td>
        </tr>};
}
else
{
print qq{
        <td width="53"> </td>
        </tr>};
}

$count++;
if ($count > 19) {
print qq{
        <tr>
        <td width="50"> </td>
        <td width="358"><a href="#" onClick="MM_openBrWindow('showall.cgi?section=$section','mainwin','scrollbars=yes,width=300,height=650')">...</a></td>
        <td width="53"> </td>
        </tr>};
last;

}        

}
$sth->finish();
$dbh->disconnect();


exit (0);


Ovo moze jos da se dotera ali pisano je na brzinu a bitno je bilo da radi :)
Obrati paznju na bitne stvari. Kako se pravi database handle (oznacen sa $dbh) i statement handle ($sth) i kako posle uzimas podatke sa fetchrow_array(). Ima mnogo drugih nacina ovaj mi je u tom trenutku izgledao najjednostavniji. Mozes i da ih uzimas kao hash, kao asociative array i jos nekih par nacina.. uglavnom, za to citaj perldoc dbi.

Samo sam morao da ugasim jos smajlije zato sam editovao poruku..

[Ovu poruku je menjao Gojko dana 03-05-2001 u 08:39 PM GMT]
[ Gojko Vujovic @ 05.03.2001. 19:43 ] @
Citat:
Judge Dred wrote:
kad bi malo objasnio kod, bilo bi veoma lepo


Uros se zezao onaj kod cak ni ne radi a ja sam ti u prethodnoj poruci dao original koji radi
[ Zoran Rašković @ 05.03.2001. 22:14 ] @
e odakle da skinem dbi ili ga vec imam sa perlom ? i kkao se instalira?
btw. gojko, da li je moguce promeniti nick ?
[ m r v a @ 05.03.2001. 22:28 ] @
eo vam code :

(.) (.)



LOL
tits
[ Gojko Vujovic @ 05.03.2001. 23:41 ] @
Citat:
Judge Dred wrote:
e odakle da skinem dbi ili ga vec imam sa perlom ? i kkao se instalira?
btw. gojko, da li je moguce promeniti nick ?


Pa sa CPAN mreze odatle se sve skida, Perl i sve za njega. cpan.perl.com

a nick nije, pa onda bi ja mogao da kazem nesto sve vas ispljujem i izmenim nick i onda nemate pojma ko sam u stvari.
ne moze da se menja nick. registruj se kao nov user ako bas moras.. ali ostaje stari..
[ Zoran Rašković @ 06.03.2001. 05:42 ] @
ma pao mi je jedan cool nick na pamet
[ MrYoo @ 06.03.2001. 21:04 ] @

Bravo Gojko onaj kod govori sam za sebe sada mu je sve jasno......))))
[ Zoran Rašković @ 06.03.2001. 21:13 ] @
ok... a koja je funkcija modula kao onaj npr. mod_perl za sta on na primer sluzi i kako se lodauje ?
[ Gojko Vujovic @ 07.03.2001. 01:06 ] @
mryoo: pa ja mislim da je prva stvar koja se nauci u perlu - bas to kako se koristi CPAN posto je nezamenjlijv.. perl -MCPAN -e shell; .. u win32 je to ppm pa pratite instrukcije

mod_perl je apache module i uglavnom se koristi da bi se ubrzalo izvrsavanje perla jer je nonstop ucitan zajedno sa apacheom i ima dosta optimizacija. nije lose koristiti ako server zna da bude opterecen.
[ Zoran Rašković @ 07.03.2001. 05:36 ] @
e gojko da ne postavljam novu temu nego mi odogvori ovde ako mozes
na kom ti se serveru nalazi ovaj sajt i da li je free ili placas?
[ Gojko Vujovic @ 07.03.2001. 10:22 ] @
Mislim da sam to vec napisao gore u announcementu, ali da ponovim :

Verat.net nas hostuje, for free Tj u zamenu za onaj banner dole sto ga vidis..
Kod njih je u toku martovski popust, tako da je hosting samo 1000 DIN za godinu dana..
[ frenne @ 07.03.2001. 13:51 ] @
sta je CPAN?
[ Zoran Rašković @ 07.03.2001. 15:32 ] @
shvatio sam ali sta mu dodje ovaj fetchrow_array ?
[ Zoran Rašković @ 07.03.2001. 15:47 ] @
jos nesto
da li moze kad se napravi .cgi da se isto ovo radi, ali samo sada znaci da to bude cgi, znaci da se otvara i prikazuje u browseru ?
ja sam probao ali mi nije nista prikazao u browseru, znaci prazan screen
[ Gojko Vujovic @ 07.03.2001. 17:23 ] @
frenne:
cpan je mreza distribuiranja perla i svega vezanog za njega. jedini izvor gde treba traziti perl module kao i sam perl. poseti cpan.perl.com za vise informacija.

Judge Dred:
fetchrow_array u stvari dovlaci red iz rezultata u obliku niz-a (array). vraca undef kao rezultat kada nema vise rezultata i tada se while petlja prekida.
[ Gojko Vujovic @ 07.03.2001. 17:25 ] @
Judge Dred:

Ovo i jeste CGI i prikazuje se u browseru.. a moras da imas nesto u bazi da bi imao sta da prikaze.

A to da je CGI mozes da vidis i po liniji:
print ("Content-type: text/html\n\n");
[ Zoran Rašković @ 07.03.2001. 19:05 ] @
pa ja sam sinoc probao cgi ali nije hteo da prikaze
cekaj jel ovo

print ("Content-type: text/html\n\n");

mora u zagradi da bude ?
[ Gojko Vujovic @ 07.03.2001. 19:42 ] @
Jok te zagrade pisem jos samo po navici.. nisu obavezne.
[ Zoran Rašković @ 07.03.2001. 19:55 ] @
hm pa onda ne znam sto nije prikazao
probacu kad dodjem kuci opet
[ Gojko Vujovic @ 07.03.2001. 21:36 ] @
pa moras da imas nesto u toj tabeli..
[ Vojislav Milunovic @ 07.03.2001. 21:54 ] @
Bas cu da vidim sutra u skoli da li si ocelavio:o)))
[ Gojko Vujovic @ 08.03.2001. 09:12 ] @

Da, ja napisem sta je CPAN frenetic 2-3 poruke dole opet to isto pita..
Al dobro ja sam smiren prilicno vidis da sam na sve odgovorio koliko sam kulturno mogao..
I jos mi je kosa na mestu.
[ frenne @ 08.03.2001. 16:41 ] @
mislim u pogresnom kontekstu si koristio CPAN..
u prvom postu si rekao da je to mreza koja distribuira perl i module za perl
dok si u drugom postu rekao : "morash koristiti CPAN" ... tipican misunderstanding ( ne znam da li je sa 2 s)

u svakom slucaju sorry


[ Gojko Vujovic @ 08.03.2001. 21:04 ] @
Nema frke, ali i dalje stojim iza toga da je to mreza koja distribuira sve vezano za Perl i da je apsolutno moranje koristiti je kad instaliras ono o cemu smo pricali.
[ Zoran Rašković @ 09.03.2001. 18:32 ] @
ma jebe me i dalje ovaj cgi da mi se prikaze u browseru kad pozivam mysql bazu. daj objasni malo ovu foru sa tabelama.
skinuo sam mod_perl treba sad jos neke module isto da skinem.
[ Gojko Vujovic @ 09.03.2001. 19:33 ] @
Citat:
Judge Dred wrote:
ma jebe me i dalje ovaj cgi da mi se prikaze u browseru kad pozivam mysql bazu. daj objasni malo ovu foru sa tabelama.
skinuo sam mod_perl treba sad jos neke module isto da skinem.


Ajd ovako prvo. Te tabele mozes da obrises ostavi samo promenljivu unutar <td>.
Onda probaj startuj ga iz komandne linije $ perl test.cgi
i pogledaj output da li lici na nesto i da li prijavljuje gresku.

I proveri da si prvo instalirao i PODESIO (ovo je kljucna rec) DBI kao i DBD::MySQL.
Sve sa CPAN-a..
[ Zoran Rašković @ 09.03.2001. 19:44 ] @
ma radi iz prompta. napravio sam najjednostavniju foru samo da prikaze sadrzaj tabele (select * from podaci;) i perl lepo to prikaze. medjutim kad probam to sa cgi u browseru, onda nema nista samo prazna strana... ne znam u cemu je problem... mislim da je fora kako si ti rekao u tim tabelama.
[ ventura @ 11.03.2001. 00:03 ] @
Sto samo bespotrebno komplikujete stvar... prost kod za citanje iz tabele:

#!/usr/bin/perl
use DBI;
$dbh = DBI->connect( 'dbi:mysql:db19862a',
'us19862a',
'xxxxxxxx',
);

$data = "SELECT * FROM market WHERE symbol = $ticker";
$sth = $dbh->prepare( $data );
$sth->execute();
while (@data = $sth->fetchrow_array()) {
$symbol = $data[0];
$dbmarket = $data[1];
$dblast = $data[2];
print "Polje: $symbol, $dblast\n";
}
$sth->finish();
$dbh->disconnect();



ako hoces da izvrsis neku komandu:


#!/usr/bin/perl
use DBI;
$dbh = DBI->connect( 'dbi:mysql:db19862a',
'us19862a',
'xxxxxxxx',
);

$komanda = qq{ LOAD DATA LOCAL INFILE "symbols.txt" INTO TABLE profit };
$dbh->do( $komanda );
$dbh->disconnect();

[ Zoran Rašković @ 12.03.2001. 05:47 ] @
ok u speo sam da pokrenem iz browsera
e sadd sam sjebo mysql, uopste nemogu normalno da udjem u mysql u ./bin direktorijumu pomocu komande ./mysql .
ali pre toga u mom cgi-ju sam stavio da otvara bazu kao korisnik root, i takodje sam stavio pass za bazu. i taj cgi perfektno radi. E sad, uopste ne mogu kao superuser da udjem u mysql , ili mogu ali ne mogu da radim nista vise sem show databases;
pokusao sam da reinstaliram mysql, ali kaze da nema neki sock ( /tmp/mysql.sck ili tako nesto ) i kaze da ne moze da se startuje. Napominjem da se radi o binary verziji mysql-a i da jos uvek nisam probao sa RPM-om.
mozda cu skinuti rpm mysql i staviti to lepo.
[ Gojko Vujovic @ 12.03.2001. 10:23 ] @
Pa grant tabele u MySQL-u nisu bas jednostavna stvar tako da ces to morati da prepustis nekome ko se razume. Uzmi hosting na saxenu ili gde se vec dobija php+mysql..
[ Zoran Rašković @ 12.03.2001. 15:18 ] @
hmmm
ma downloadavo sam rpm verziju i idalje mi kaze da ne moze niki /tmp/mysql.sock. da nadje, nemam pojma sta je to s*****
[ Zoran Rašković @ 12.03.2001. 22:38 ] @
da li neko zna st aradi ovaj mysql.sock ?
[ Gojko Vujovic @ 17.03.2001. 02:35 ] @
Ako nemas mysql.sock, nisi ni pokrenuo mysqld. Pogledaj wrapper scriptu za startovanje mysql-a i startuj je.. safe_mysqld