Latest web development tutorials

Perlのデータベース接続

私たちはあなたを紹介します。この章では、Perlのデータベースに接続します。

Perl 5の、我々は、データベースに接続するためにDBIモジュールを使用することができます。

DBI英語名:データベースに依存しないインタフェースと呼ばれるデータベース独立インタフェース、中国。

DBIとメソッド、変数や定数のセットを定義し、特定のデータベース・プラットフォームに依存しないデータベースの永続化層を提供するPerl言語データベースインタフェースの通信規格として。


DBI構造

DBIと、特定のデータベース・プラットフォームに依存しない、我々は、Oracle、MySQLやInformix、および他のデータベースに適用することができます。

すべてのグラフDBIのAPI(アプリケーション・プログラミング・インタフェース:アプリケーション・プログラミング・インターフェース)を取得し、実装上の対応するドライバにSQLデータから送信され、その後に分散し、最後にデータを取り戻します。

変数名の規則

変数の命名のより一般的な名前の以下のセット:

$dsn    驱动程序对象的句柄
$dbh    一个数据库对象的句柄
$sth    一个语句或者一个查询对象的句柄
$h      通用的句柄 ($dbh, $sth, 或 $drh),依赖于上下文
$rc     操作代码返回的布什值(true 或 false)
$rv     操作代码返回的整数值
@ary    查询返回的一行值的数组(列表)
$rows   操作代码返回的行数值
$fh     文件句柄
undef   NULL 值表示未定义
\%attr  引用属性的哈希值并传到方法上

データベース接続

次に、我々はどのようにデータベース操作の例として、MySQLデータベースにPerlを実証します。

ここでは、以下に示されているMySQLのデータベースw3bigデータテーブルウェブサイト、テーブル構造とデータでデータベースを作成します。

データシートをダウンロード: http://static.w3big.com/download/websites_perl.sql

次に、我々は、データベースに接続するために次のコードを使用します。

#!/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文を準備準備に使用します。
  • SQL文を実行するために実行()APIを使用してください。
  • ステートメント・ハンドルを解放するために仕上げ()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;

また、アプリケーションは、INSERTクエリを実行するために、変数のプレースホルダを代入して次の例は、入力および出力パラメータをバインドすることができます?:

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文を準備準備に使用します。
  • SQL文を実行するために実行()APIを使用してください。
  • ステートメント・ハンドルを解放するために仕上げ()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文を準備準備に使用します。
  • SQL文を実行するために実行()APIを使用してください。
  • ステートメント・ハンドルを解放するために仕上げ()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;

使用do文

次のように文は彼が正常に実行がtrueを返し、非常に短く、UPDATE、INSERT、またはDELETE操作を実行することができ、それはfalseを返します失敗し、例があります :

$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操作は、トランザクション処理をサポートしている、それを達成するための2つの方法があります。

データベースへの接続で1、それがトランザクションを開始しました

$dbh = DBI->connect($dsn, $userid, $password, {AutoCommit => 0}) or die $DBI::errstr;

自動コミットを設定し、接続時の上記のコードを使用すると、データベース操作を更新するとき、それは自動的にデータベースに直接書き込まれたものを更新しませんが、$は$ dbh-によってプログラムに>にコミットする、つまり、偽でありますデータが実際にデータベースに書き込まれるように、または$は$ dbh->ロールバック操作をロールバックします。

2、$は$ dbh-> begin_workによって()文は、トランザクションを開始します

このように、データベース接続時に自動コミット= 0を設定する必要はありません。

あなたは、トランザクションの操作を数回、いないすべてのトランザクションがデータベースに接続するために始めているデータベースに接続することができます。

$rc  = $dbh->begin_work  or die $dbh->errstr;

#####################
##这里执行一些 SQL 操作
#####################

$dbh->commit;    # 成功后操作
-----------------------------
$dbh->rollback;  # 失败后回滚

データベース接続を切断します

私たちがデータベースから切断する必要がある場合は、切断のAPIを使用することができます。

$rc = $dbh->disconnect  or warn $dbh->errstr;