подключение к базе данных Perl
В этой главе мы представим вам подключить базу данных Perl.
Perl 5, мы можем использовать модуль DBI для подключения к базе данных.
DBI английское название: База данных Independent Interface, китайский называется зависящий от баз данных интерфейс.
Как DBI и стандарт связи интерфейса базы данных Perl языка, который определяет набор методов, переменных и констант, а также обеспечить определенную базу данных независимую от платформы сохранения состояния базы данных слоя.
структура DBI
DBI и конкретная база данных независимой от платформы, мы можем применить его в Oracle, MySQL или Informix и другими базами данных.
Получить все диаграммы DBI API (Application Programming Interface: Application Programming Interface), посылаемым с данными SQL, а затем распространяются на соответствующий драйвер на реализации, и, наконец, получить данные обратно.
Переменные условные названия
Следующий набор более общее название переменной именования:
$dsn 驱动程序对象的句柄 $dbh 一个数据库对象的句柄 $sth 一个语句或者一个查询对象的句柄 $h 通用的句柄 ($dbh, $sth, 或 $drh),依赖于上下文 $rc 操作代码返回的布什值(true 或 false) $rv 操作代码返回的整数值 @ary 查询返回的一行值的数组(列表) $rows 操作代码返回的行数值 $fh 文件句柄 undef NULL 值表示未定义 \%attr 引用属性的哈希值并传到方法上
Связь с базами данных
Далее мы покажем, Perl с базой данных MySQL в качестве примера того, как операции с базами данных.
Здесь мы создаем базу данных в MySQL таблицы w3big данных базы данных веб-сайтов, структура таблицы и данные приведены ниже:
Загрузить спецификацию: http://static.w3big.com/download/websites_perl.sql~~HEAD=dobj
Далее, мы используем следующий код для подключения к базе данных:
#!/usr/bin/perl -w use strict; use DBI; my $host = "localhost"; # 主机地址 my $driver = "mysql"; # 接口类型 默认为 localhost my $database = "w3big"; # 数据库 # 驱动程序对象的句柄 my $dsn = "DBI:$driver:database=$database:$host"; my $userid = "root"; # 数据库用户名 my $password = "123456"; # 数据库密码 # 连接数据库 my $dbh = DBI->connect($dsn, $userid, $password ) or die $DBI::errstr; my $sth = $dbh->prepare("SELECT * FROM Websites"); # 预处理 SQL 语句 $sth->execute(); # 执行 SQL 操作 # 注释这部分使用的是绑定值操作 # $alexa = 20; # my $sth = $dbh->prepare("SELECT name, url # FROM Websites # WHERE alexa > ?"); # $sth->execute( $alexa ) or die $DBI::errstr; # 循环输出所有数据 while ( my @row = $sth->fetchrow_array() ) { print join('\t', @row)."\n"; } $sth->finish(); $dbh->disconnect();
Вставить
шаги:
- Используйте подготовить () API подготовленных операторов SQL.
- Используйте выполнить () API для выполнения операторов SQL.
- Используйте финишную () API, чтобы освободить дескриптор инструкции.
- И, наконец, если все пойдет хорошо он будет представлен в течение операции.
my $sth = $dbh->prepare("INSERT INTO Websites (name, url, alexa, conutry ) values ('Twitter', 'https://twitter.com/', 10, 'USA')"); $sth->execute() or die $DBI::errstr; $sth->finish(); $dbh->commit or die $DBI::errstr;
Приложение также может связать входные и выходные параметры, следуя примеру путем замены переменных заполнителей для выполнения запроса вставки ?:
my $name = "Twitter"; my $url = "https://twitter.com/"; my $alexa = 10; my $conutry = "USA"; my $sth = $dbh->prepare("INSERT INTO Websites (name, url, alexa, conutry ) values (?,?,?,?)"); $sth->execute($name,$url,$alexa, $conutry) or die $DBI::errstr; $sth->finish(); $dbh->commit or die $DBI::errstr;
операция обновления
шаги:
- Используйте подготовить () API подготовленных операторов SQL.
- Используйте выполнить () API для выполнения операторов SQL.
- Используйте финишную () API, чтобы освободить дескриптор инструкции.
- И, наконец, если все пойдет хорошо он будет представлен в течение операции.
my $sth = $dbh->prepare("UPDATE Websites SET alexa = alexa + 1 WHERE country = 'CN'"); $sth->execute() or die $DBI::errstr; print "更新的记录数 :" + $sth->rows; $sth->finish(); $dbh->commit or die $DBI::errstr;
Приложение также может связать входные и выходные параметры, следуя примеру путем замены переменных заполнителей для выполнения запроса на обновление ?:
$name = '本教程'; my $sth = $dbh->prepare("UPDATE Websites SET alexa = alexa + 1 WHERE name = ?"); $sth->execute('$name') or die $DBI::errstr; print "更新的记录数 :" + $sth->rows; $sth->finish();
Конечно, мы можем также связать значение, которое нужно установить следующим образом для страны придется изменить CN Алексу 1000:
$country = 'CN'; $alexa = 1000:; my $sth = $dbh->prepare("UPDATE Websites SET alexa = ? WHERE country = ?"); $sth->execute( $alexa, '$country') or die $DBI::errstr; print "更新的记录数 :" + $sth->rows; $sth->finish();
Удаление данных
шаги:
- Используйте подготовить () API подготовленных операторов SQL.
- Используйте выполнить () API для выполнения операторов SQL.
- Используйте финишную () API, чтобы освободить дескриптор инструкции.
- И, наконец, если все пойдет хорошо он будет представлен в течение операции.
Следующие данные о сайтах в данных AlexA больше 1000 будут удалены:
$alexa = 1000; my $sth = $dbh->prepare("DELETE FROM Websites WHERE alexa = ?"); $sth->execute( $alexa ) or die $DBI::errstr; print "删除的记录数 :" + $sth->rows; $sth->finish(); $dbh->commit or die $DBI::errstr;
Использование сделать заявление
делать заявления могут выполнять UPDATE, INSERT или DELETE операции, он довольно короткий, успешное выполнение возвращает истину, терпит неудачу он возвращает ложь, примеры являются следующие:
$dbh->do('DELETE FROM Websites WHERE alexa>1000');
COMMIT операцию
обязательство зафиксировать транзакцию, чтобы завершить работу базы данных:
$dbh->commit or die $dbh->errstr;
операция ROLLBACK
При возникновении ошибки во время выполнения SQL, вы можете выполнить откат данных без каких-либо изменений:
$dbh->rollback or die $dbh->errstr;
дела
И другие языки, Perl DBI функционирование базы данных также поддерживает обработку транзакций, есть два пути достижения этой цели:
1, в связи с базой данных, когда он начал транзакцию
$dbh = DBI->connect($dsn, $userid, $password, {AutoCommit => 0}) or die $DBI::errstr;
Приведенный выше код в момент установления соединения AutoCommit является ложным, то есть, при обновлении операции с базой данных, она не обновляется автоматически, написанные непосредственно в базу данных, но в программе на $ dbh-> обязательство так что данные на самом деле записаны в базу данных, или $ dbh-> откат откатить операцию.
2, на $ dbh-> begin_work () заявление, чтобы начать транзакцию
Таким образом, нет необходимости устанавливать AutoCommit = 0 в момент подключения к базе данных.
Вы можете подключить операци транзакции базы данных несколько раз, не каждая сделка начинают подключаться к базе данных.
$rc = $dbh->begin_work or die $dbh->errstr; ##################### ##这里执行一些 SQL 操作 ##################### $dbh->commit; # 成功后操作 ----------------------------- $dbh->rollback; # 失败后回滚
Отключите соединение с базой данных
Если нам нужно отключить от базы данных, вы можете использовать API отключения:
$rc = $dbh->disconnect or warn $dbh->errstr;