Connexion à la base de données Perl


Dans ce chapitre, nous vous présenterons la connexion à la base de données Perl.

En Perl 5, nous pouvons utiliser le module DBI pour nous connecter à la base de données.

Le nom anglais complet de DBI est : Database Independent Interface, qui est appelé Database Independent Interface en chinois.

DBI est l'interface standard pour communiquer avec la base de données en langage Perl. Elle définit une série de méthodes, de variables et de constantes, et fournit une couche de persistance de base de données indépendante de la plate-forme de base de données spécifique.


Structure DBI

DBI n'a rien à voir avec la plateforme de base de données spécifique Nous pouvons l'appliquer à des bases de données telles que Oracle, MySQL ou Informix.

Le DBI dans le graphique obtient les données SQL envoyées par toutes les API (Application Programming Interface : Application Programming Interface), puis les distribue au pilote correspondant pour exécution, et enfin obtient les données et les renvoie.

Convention de nom de variable

Ce qui suit définit les méthodes de dénomination de nom de variable les plus couramment utilisées :

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

Connexion à la base de données

Ensuite, nous utilisons MySQL base de données Prenons un exemple pour démontrer comment Perl exploite la base de données.

Ici, nous créons une base de données php dans la base de données MySQL. La table de données est celle des sites Web. La structure de la table et les données sont les suivantes :

Téléchargez le. table de données : http ://static.php.cn/download/websites_perl.sql

Ensuite, nous utilisons le code suivant pour nous connecter à la base de données :

#!/usr/bin/perl -w

use strict;
use DBI;

my $host = "localhost";         # 主机地址
my $driver = "mysql";           # 接口类型 默认为 localhost
my $database = "php";        # 数据库
# 驱动程序对象的句柄
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();

Insérer une opération

Étapes d'exécution :

  • Utilisez l'API Prepare() pour préparer les instructions SQL.

  • Utilisez l'API perform() pour exécuter des instructions SQL.

  • Utilisez l'API finish() pour libérer le descripteur d'instruction.

  • Enfin, si tout se passe bien, l'opération d'exécution ci-dessus sera soumise.

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;

L'application peut également lier des paramètres de sortie et d'entrée. L'exemple suivant exécute une requête d'insertion en remplaçant la position de l'espace réservé ? par une variable :

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;

Opération de mise à jour

Étapes d'exécution :

  • Utilisez l'API prepare() pour préparer l'instruction SQL.

  • Utilisez l'API perform() pour exécuter des instructions SQL.

  • Utilisez l'API finish() pour libérer le descripteur d'instruction.

  • Enfin, si tout se passe bien, l'opération d'exécution ci-dessus sera soumise.

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;

L'application peut également lier des paramètres de sortie et d'entrée. L'exemple suivant exécute une requête de mise à jour en remplaçant la position de l'espace réservé ? par une variable :

$name = 'php中文网';

my $sth = $dbh->prepare("UPDATE Websites
                        SET   alexa = alexa + 1 
                        WHERE name = ?");
$sth->execute('$name') or die $DBI::errstr;
print "更新的记录数 :" + $sth->rows;
$sth->finish();

Of. bien sûr, nous pouvons également lier les valeurs à définir, comme indiqué ci-dessous, modifier l'Alexa avec le pays 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();

Supprimer les données

Étapes d'exécution :

  • Utilisez l'API prepare() pour préparer les instructions SQL.

  • Utilisez l'API perform() pour exécuter des instructions SQL.

  • Utilisez l'API finish() pour libérer le descripteur d'instruction.

  • Enfin, si tout se passe bien, l'opération d'exécution ci-dessus sera soumise.

Les données suivantes supprimeront toutes les données des sites Web avec Alexa supérieur à 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;

Utilisez l'instruction do

do pour effectuer des opérations UPDATE, INSERT ou DELETE. Elle est relativement simple à utiliser. Elle renvoie true si l'exécution est réussie. et false si l'exécution échoue. Exemple Comme suit :

$dbh->do('DELETE FROM Websites WHERE alexa>1000');

Opération COMMIT

commit consiste à valider la transaction et à terminer l'opération de base de données :

$dbh->commit or die $dbh->errstr;

Opération ROLLBACK

Si dans Si une erreur se produit lors de l'exécution de SQL, les données peuvent être restaurées sans aucune modification :

$dbh->rollback or die $dbh->errstr;

Transaction

Comme d'autres langages, Perl DBI prend également en charge le traitement des transactions pour les opérations de base de données. Son implémentation est la suivante Deux :

1. Démarrez une transaction lors de la connexion à la base de données

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

Le code ci-dessus définit AutoCommit sur false lors de la connexion, ce qui signifie que lorsque vous mettez à jour. la base de données À ce stade, il n'écrira pas automatiquement ces mises à jour directement dans la base de données, mais nécessite que le programme écrive réellement les données dans la base de données via $dbh->commit, ou $dbh->rollback pour restaurer la base de données précédente. opération.

2. Démarrez une transaction via l'instruction $dbh->begin_work()

Cette méthode ne nécessite pas de définir AutoCommit = 0 lors de la connexion à la base de données.

Vous pouvez effectuer plusieurs opérations de transaction avec une seule connexion à la base de données, sans avoir à vous connecter à la base de données au début de chaque transaction.

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

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

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

Déconnecter la connexion à la base de données

Si nous devons déconnecter la connexion à la base de données, nous pouvons utiliser l'API de déconnexion :

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