Latest web development tutorials

подключение к базе данных 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;