Π ΠΌΠΎΠ΄ΡΠ»Π΅ XBase ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ DBF-ΡΠ°ΠΉΠ»Π°ΠΌΠΈ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΡΡΡΠΈΠΌΠΈ ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΡΠΌΠΈ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Ρ Π΄Π»Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ Π±ΡΡΡΡΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π² ΡΠ°Π±Π»ΠΈΡΠ΅.
ΠΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π°Π²Π½ΠΎ ΠΏΡΠΈΡΠ»ΠΈ ΠΊ Π²ΡΠ²ΠΎΠ΄Ρ, ΡΡΠΎ Π²ΠΌΠ΅ΡΡΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΎΡΠΌΠ°ΡΠΎΠ² Π΄Π°Π½Π½ΡΡ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΏΠΎ ΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ (Π±Π΅Π· ΠΊΠΎΡΠΎΡΡΡ , ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π΅Π»ΡΠ·Ρ ΠΎΠ±ΠΎΠΉΡΠΈΡΡ) Π³ΠΎΡΠ°Π·Π΄ΠΎ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π½Π΅Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΠ΅ Π½Π° ΡΠ½ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ Π΄ΠΎΡΡΡΠΏΠ΅ ΠΊ Π±Π°Π·Π°ΠΌ Π΄Π°Π½Π½ΡΡ Π½Π° Π±Π°Π·Π΅ ΡΠ·ΡΠΊΠ° SQL.
Π£Π½ΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΡΠΌ Π±Π°Π·Π°ΠΌ Π΄Π°Π½Π½ΡΡ ΠΎΡΠ½ΠΎΠ²Π°Π½Π° Π½Π° ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° Π΄ΠΎΡΡΡΠΏΠ° Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠ»ΠΎΠ΅Π². ΠΠ΅ΡΠ²ΡΠΉ ΡΠ»ΠΎΠΉ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π½Π°Π±ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΡ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄Π°Π½Π½ΡΡ ΠΈΠ· ΡΡΠΎΠ³ΠΎ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π½Π° ΡΠ·ΡΠΊΠ΅ SQL. ΠΡΠΎΡΠΎΠΉ ΡΠ»ΠΎΠΉ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΌΠΈ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ Ρ ΡΡΠ΅ΡΠΎΠΌ ΠΈΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ. ΠΠ·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΌ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠΌ Π΄Π°Π½Π½ΡΡ Π²ΠΎΠ·Π»Π°Π³Π°Π΅ΡΡΡ Π½Π° Π΄ΡΠ°ΠΉΠ²Π΅Ρ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΡΡΡΠΏΠ°Π΅Ρ ΠΏΠΎΡΡΠ΅Π΄Π½ΠΈΠΊΠΎΠΌ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠ΅ΡΠ²ΡΠΌ ΡΠ»ΠΎΠ΅ΠΌ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° Π΄ΠΎΡΡΡΠΏΠ° ΠΈ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ , ΡΠΊΡΡΠ²Π°Ρ ΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ° ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π΄Π΅ΡΠ°Π»ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΠΠ. ΠΡΠ°ΠΉΠ²Π΅ΡΡ Π±Π°Π· Π΄Π°Π½Π½ΡΡ ΠΎΠ±ΡΡΠ½ΠΎ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΠΈ Π‘Π£ΠΠ Π΄Π»Ρ ΡΠ²ΠΎΠΈΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ². ΠΠ° ΡΡΠΈΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ°Ρ ΠΌΠ½ΠΎΠ³ΠΎΡΠ»ΠΎΠΉΠ½ΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΎΡΠ½ΠΎΠ²Π°Π½Ρ ΡΠ°ΠΊΠΈΠ΅ ΡΠΈΡΠΎΠΊΠΎ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠ΅ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΊ Π±Π°Π·Π°ΠΌ Π΄Π°Π½Π½ΡΡ , ΠΊΠ°ΠΊ ODBC (Open DataBase Connectivity) ΠΈ JDBC (Java DataBase Connectivity).
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΈΠΌΠ΅Π΅Ρ ΠΈ DBI (DataBase Interface) - ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π±Π°Π·Π°ΠΌ Π΄Π°Π½Π½ΡΡ Π² Perl. ΠΡΠ½ΠΎΠ²Π½ΡΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠΌ ΡΡΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ DBI, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΡΠ½ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ΅ΡΠ²ΠΈΡΡ Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ . ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ ΠΌΠΎΠ΄ΡΠ»Ρ DBI ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ²ΠΎΠ΅ ΡΠ°ΡΠΏΠΎΡΡΠΆΠ΅Π½ΠΈΠ΅ Π΅Π΄ΠΈΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ°ΠΌΡΠΌΠΈ ΡΠ°Π·Π½ΡΠΌΠΈ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ : ΠΈ ΡΠ΅ΠΌΠΈ, ΡΡΠΎ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π½Π° ΡΡΠΎΠΌ ΠΆΠ΅ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅, ΠΈ ΡΠ΅ΠΌΠΈ, ΡΡΠΎ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π½Π° ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅ Π±Π°Π· Π΄Π°Π½Π½ΡΡ . ΠΠΎΠ΄ΡΠ»Ρ DBI Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ Π½ΡΠΆΠ½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ, ΠΌΠΎΠ΄ΡΠ»ΠΈ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΎΠ² ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ Π±Π°Π· Π΄Π°Π½Π½ΡΡ (DataBase Driver, DBD), Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ: DBD::DB2, DBD::InterBase, DBD::mysql, DBD::Oracle, DBD::Sybase. ΠΠΎΡΡΡΠΏ ΠΊ Π»ΡΠ±ΠΎΠΉ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ DBI Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ°ΠΏΠΎΠ². ΠΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΠΌ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΈΠ· Π½ΠΈΡ .
1Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ
Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠΌ connect() ΠΊΠ»Π°ΡΡΠ° DBI, ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΡΡΡΠΎΠΊΠ° Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° Π΄Π°Π½Π½ΡΡ
, ΠΈΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈ ΠΏΠ°ΡΠΎΠ»Ρ, Π° ΠΊΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ:
$dbh = DBI->connect($data_source, $user, $password, \%parms);
2ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ
Π²ΡΠ΄Π΅Π»ΡΠ΅ΡΡΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΡΡΠ°ΠΏ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΡΡΠ΅Π±ΡΠ΅Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΡ
ΡΠ΅ΡΡΡΡΠΎΠ² Π‘Π£ΠΠ. ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ prepare() ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΎΡΠ° Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
, ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΡΡΡΠΎΠΊΠ°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠ·ΡΠΊΠ° Π·Π°ΠΏΡΠΎΡΠΎΠ² SQL:
$sth = $dbh->prepare($sql_statement);
3ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ. ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΡΡ ΡΠ°Π½Π΅Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ³ΠΎ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΎΡΠ° execute(), ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΌΠΎΠ³ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π² Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ΅ SQL-ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅:
$sth->execute(@bind_values); # Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠΎ ΡΠΏΠΈΡΠΊΠΎΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ
$dbh->do($sql_statement); # Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π±Π΅Π· ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ
4ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ Π΄Π°Π½Π½ΡΡ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΌΠ½ΠΎΠ³ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ DBI.
5ΠΡΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΎΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ disconnect() ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΎΡΠ° Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ Π·Π°Π²Π΅ΡΡΠ°ΡΡΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΡΠ΅ΡΡΡΡΡ:
$dbh->disconnect; # ΠΎΡΠΊΠ»ΡΡΠΈΡΡΡΡ ΠΎΡ ΠΠ
ΠΡΠΈΠ²Π΅Π΄Π΅Π½Π½Π°Ρ ΡΡ Π΅ΠΌΠ° ΠΏΡΠΎΡΡΠ° ΠΈ Π»ΠΎΠ³ΠΈΡΠ½Π°, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ°Π±ΠΎΡΠ° Ρ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ ΡΠ΅ΡΠ΅Π· DBI Π±ΡΡΡΡΠΎ ΠΎΡΠ²Π°ΠΈΠ²Π°Π΅ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°ΠΌΠΈ. ΠΠΎ ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ DBI, Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π΅ΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΡΠ½Π΅Π½ΠΈΠΉ.
Π ΡΠ·ΡΠΊΠ΅ ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² SQL ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ Π½Π°Π±ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄, Π½ΠΎ ΠΎΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π½Π°Π΄ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ . ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ SQL: ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ (CREATE), Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π·Π°ΠΏΠΈΡΠ΅ΠΉ (INSERT), ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ (UPDATE) ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ (DELETE), Π° ΡΠ°ΠΊΠΆΠ΅ Π²ΡΠ±ΠΎΡΠΊΠ° Π·Π°ΠΏΠΈΡΠ΅ΠΉ (SELECT) ΠΏΠΎ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ ΡΡΠ»ΠΎΠ²ΠΈΡ. ΠΠ·ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ·ΡΠΊΠ° SQL Π²ΡΡ ΠΎΠ΄ΠΈΡ Π·Π° ΡΠ°ΠΌΠΊΠΈ ΡΡΠΎΠ³ΠΎ ΠΊΡΡΡΠ°, ΠΏΠΎΡΡΠΎΠΌΡ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ Π±ΡΠ΄ΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΌΡΠ΅ ΠΏΡΠΎΡΡΡΠ΅ ΠΈΡ ΡΠΎΡΠΌΡ, ΠΈ ΡΠΌΡΡΠ» ΡΡΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ½ΡΡΠ΅Π½ ΠΈΠ· ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°.
Π‘Π»ΠΎΡΡ Π΄Π»Ρ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π² SQL-ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°ΡΡΡΡ Π·Π½Π°ΠΊΠ°ΠΌΠΈ Π²ΠΎΠΏΡΠΎΡΠ° '?' ΠΈ Π²ΡΠ³Π»ΡΠ΄ΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
$sth = $dbh->prepare( 'SELECT name, area FROM mollusc WHERE id>? AND id<?');
ΠΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΡΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ 1000 ΠΈ 9000 Π±ΡΠ΄ΡΡ Π²ΡΠ±ΡΠ°Π½Ρ Π·Π°ΠΏΠΈΡΠΈ ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ id Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅. ΠΡΠΈ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠ»ΠΎΡΡ Π·Π°ΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠ»Π΅Π²Π° Π½Π°ΠΏΡΠ°Π²ΠΎ:
$sth->execute(1000, 9000); # ΠΏΠΎΠ΄ΡΡΠ°Π²ΠΈΡΡ ΡΠΈΡΠ»Π° Π²ΠΌΠ΅ΡΡΠΎ ?
ΠΠΎΡΠ»Π΅ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΠΎΠ·Π½Π°ΡΠ°ΡΡΠ°Ρ "Π²ΡΠ±ΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠ»Π±ΡΠΎΠ² name ΠΈ area ΠΈΠ· ΡΠ°Π±Π»ΠΈΡΡ mollusc Ρ ΡΠ΅Ρ Π·Π°ΠΏΠΈΡΠ΅ΠΉ, Π³Π΄Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠ»Π±ΡΠ° id Π±ΠΎΠ»ΡΡΠ΅ 1000 ΠΈ ΠΌΠ΅Π½ΡΡΠ΅ 9000":
SELECT name, area FROM mollusc WHERE id>1000 AND id<9000
ΠΡΠΎΠΌΠ΅ ΡΡΠ΅Π΄ΡΡΠ² Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ SQL-ΠΊΠΎΠΌΠ°Π½Π΄ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ DBI ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π΄Π»Ρ Π²ΡΠ±ΠΎΡΠΊΠΈ ΠΈΠ· Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π² Π²ΠΈΠ΄Π΅ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² ΠΈΠ»ΠΈ Ρ ΡΡΠ΅ΠΉ Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠ΄ΠΎΠ±Π½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π½Π° Perl. ΠΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ Ρ Π½ΠΈΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ, Π΅ΡΠ»ΠΈ ΠΏΠΎΡΠΈΡΠ°ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ, Π²ΡΠ²Π΅Π΄Π΅Π½Π½ΡΡ ΠΏΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅
perldoc DBI
ΠΠΎΠΊΠ°ΠΆΠ΅ΠΌ ΠΏΡΠΈΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ DBI Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΊΠ»Π°ΡΡΠ° Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡΠΌ DBF-ΡΠ°ΠΉΠ»Π°ΠΌ - ΠΌΠΎΠ΄ΡΠ»Ρ DBD::XBase. ΠΡΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρ Π½ΡΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΌ ΡΠ°Π½Π΅Π΅ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΠΏΡΠ΅ΠΆΠ΄Π΅, ΡΠ΅ΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ XBase. Π ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠ°Π±Π»ΠΈΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ SQL-ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ CREATE:
use DBI; # ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ DBI my $path = '.'; # ΠΊΠ°ΡΠ°Π»ΠΎΠ³, Π³Π΄Π΅ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Ρ ΡΠ°Π±Π»ΠΈΡΡ ΠΠ my $table = 'mollusc'; # DBF-ΡΠ°ΠΉΠ» # ΠΏΠΎΠ΄ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡΡΡ ΠΊ ΠΠ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π΄ΡΠ°ΠΉΠ²Π΅Ρ DBD::XBase my $dbh = DBI->connect("dbi:XBase:$path") or die $DBI::errstr; # ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ°Π±Π»ΠΈΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ $dbh->do("CREATE TABLE $table (id INT, name CHAR(35), latin CHAR(30), area CHAR(45))"); $dbh->disconnect; # ΠΎΡΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡΡΡ ΠΎΡ ΠΠ
Π‘Π»Π΅Π΄ΡΡΡΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π² ΡΠΈΠΊΠ»Π΅ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ ΡΠ°Π±Π»ΠΈΡΡ Π΄Π°Π½Π½ΡΠΌΠΈ ΠΈΠ· ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°, Π΄ΠΎΠ±Π°Π²Π»ΡΡ Π² Π½Π΅Π΅ Π·Π°ΠΏΠΈΡΠΈ SQL-ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ INSERT:
use DBI; # ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ DBI my $path = '.'; # ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Ρ ΡΠ°Π±Π»ΠΈΡΠ°ΠΌΠΈ ΠΠ my $table = 'mollusc'; # DBF-ΡΠ°ΠΉΠ» # ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΡ ΠΊ ΠΠ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π΄ΡΠ°ΠΉΠ²Π΅Ρ DBD::XBase my $dbh = DBI->connect("dbi:XBase:$path") or die $DBI::errstr; # ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΠΌ SQL-ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΄Π»Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ my $sth = $dbh->prepare("INSERT INTO $table (id, name, latin, area) VALUES (?, ?, ?, ?)") or die $dbh->errstr(); # Π² ΡΠΈΠΊΠ»Π΅ ΡΠΈΡΠ°Π΅ΠΌ ΡΡΡΠΎΠΊΠΈ Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π² ΠΠ open my $text, '<', 'mollusc.txt' or die; # ΡΠ°ΠΉΠ», ΠΎΡΠΊΡΠ΄Π° while (my $data = <$text>) { # ΡΠΈΡΠ°Π΅ΠΌ Π΄Π°Π½Π½ΡΠ΅, chomp($data); # ΡΠ΄Π°Π»ΡΡ \n # ΠΈ ΡΠ°Π·Π±ΠΈΠ²Π°Ρ ΡΡΡΠΎΠΊΡ Π½Π° ΠΏΠΎΠ»Ρ ΠΏΠΎ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ ';': my ($id, $name, $latin, $area) = split(';', $data); # Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π·Π°ΠΏΠΈΡΡ, ΠΏΠΎΠ΄ΡΡΠ°Π²Π»ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρ $sth->execute($id, $name, $latin, $area) or die; } close $text; # Π·Π°ΠΊΡΡΠ²Π°Π΅ΠΌ ΡΠ΅ΡΡΠΎΠ²ΡΠΉ ΡΠ°ΠΉΠ» $dbh->disconnect; # ΠΎΡΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅ΠΌΡΡ ΠΎΡ ΠΠ
ΠΠ°Π»Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ Π² ΡΠ°Π±Π»ΠΈΡΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ SQL, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π½ΠΎ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, Π³Π΄Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ Π² Π·Π°ΠΏΠΈΡΠΈ Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ ΠΈ ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ Π·Π°ΠΏΠΈΡΡ ΠΏΠΎ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠΌΡ Π½ΠΎΠΌΠ΅ΡΡ:
use DBI; # ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ DBI my $path = '.'; # ΠΊΠ°ΡΠ°Π»ΠΎΠ³, Π³Π΄Π΅ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Ρ ΡΠ°Π±Π»ΠΈΡΡ ΠΠ my $table = 'mollusc'; # DBF-ΡΠ°ΠΉΠ» # ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡΡΡ Ρ ΠΠ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π΄ΡΠ°ΠΉΠ²Π΅Ρ DBD::XBase my $dbh = DBI->connect("dbi:XBase:$path") or die $DBI::errstr; # ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π·Π°ΠΏΠΈΡΡ Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ, # Π·Π°ΠΌΠ΅Π½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ ΠΏΠΎΠ»Π΅ΠΉ Π½Π° Π½ΠΎΠ²ΡΠ΅ $dbh->do("UPDATE $table SET name=?,area=? WHERE id=?", undef, 'ΠΠ΅ΠΌΡΡΠΆΠ½Π°Ρ ΠΏΠΈΠ½ΠΊΡΠ°Π΄Π°', 'ΠΠ²ΡΡΡΠ°Π»ΠΈΡ', 89147) or die; # ΡΠ΄Π°Π»ΠΈΡΡ Π·Π°ΠΏΠΈΡΡ Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ 93749 $dbh->do("DELETE FROM $table WHERE id=93749") or die; $dbh->disconnect; # ΠΎΡΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡΡΡ ΠΎΡ ΠΠ
ΠΠ»Ρ Π²ΡΠ±ΠΎΡΠΊΠΈ Π΄Π°Π½Π½ΡΡ ΠΈΠ· ΡΠ°Π±Π»ΠΈΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ SQL-ΠΊΠΎΠΌΠ°Π½Π΄Π° SELECT, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ, Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΠΊΠ°ΠΊΠΈΡ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ Π·Π°ΠΏΠΈΡΠΈ Π½ΡΠΆΠ½ΠΎ Π²ΠΊΠ»ΡΡΠΈΡΡ Π² Π²ΡΠ±ΠΎΡΠΊΡ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΌΡ ΡΡΠ»ΠΎΠ²ΠΈΡ ΠΎΡΠ±ΠΈΡΠ°ΡΡ ΡΡΡΠΎΠΊΠΈ ΡΠ°Π±Π»ΠΈΡΡ:
use DBI; # ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ DBI my $path = '.'; # ΠΊΠ°ΡΠ°Π»ΠΎΠ³, Π³Π΄Π΅ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Ρ ΡΠ°Π±Π»ΠΈΡΡ ΠΠ my $table = 'mollusc'; # DBF-ΡΠ°ΠΉΠ» # ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡΡΡ Ρ ΠΠ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π΄ΡΠ°ΠΉΠ²Π΅Ρ DBD::XBase my $dbh = DBI->connect("dbi:XBase:$path") or die $DBI::errstr; # Π²ΡΠ±ΡΠ°ΡΡ Ρ Π²ΡΠ΅Ρ ΡΡΡΠΎΠΊ ΡΠ°Π±Π»ΠΈΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ ΠΏΠΎΠ»Ρ my $sth = $dbh->prepare("SELECT name,area FROM $table WHERE id>?") or die $dbh->errstr; $sth->execute(1000) or die $sth->errstr(); # Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ while (my @row = $sth->fetchrow_array) { # ΠΈ Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°ΡΡ print "@row\n"; # Π²ΡΠ±ΡΠ°Π½Π½ΡΠ΅ ΡΡΡΠΎΠΊΠΈ } # Π² ΡΠΈΠΊΠ»Π΅ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ $dbh->disconnect; # ΠΎΡΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡΡΡ ΠΎΡ ΠΠ