Latest web development tutorials

connexion de base de données Perl

Ce chapitre, nous allons vous présenter pour connecter la base de données Perl.

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

DBI Nom anglais: Base de données Interface indépendante, chinois appelé interface de base de données indépendante.

Comme DBI et la norme de communication de l'interface de base de données de langage Perl, qui définit un ensemble de méthodes, variables et constantes, et de fournir une couche base de données de persistance de plate-forme indépendante spécifique base de données.


Structure DBI

DBI et notamment la base de données indépendant de la plateforme, nous pouvons l'appliquer dans Oracle, MySQL ou Informix, et d'autres bases de données.

Obtenez toutes les API graphique DBI (interface de programmation d'application: Application Programming Interface) envoyé à partir de données SQL, puis distribué au conducteur correspondant sur la mise en œuvre, et enfin récupérer les données.

conventions de noms de variables

L'ensemble du nom plus commun de nommer les variables suivantes:

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

Database Connectivity

Ensuite, nous démontrons Perl avec base de données MySQL comme un exemple de la façon dont les opérations de base de données.

Ici, nous créons une base de données MySQL Sites de table de données w3big de base de données, la structure des tables et des données est indiqué ci-dessous:

Télécharger la fiche technique: http://static.w3big.com/download/websites_perl.sql

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

#!/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();

Insérer

étapes:

  • Utiliser la préparation () API préparé des instructions SQL.
  • Utilisez execute () API pour exécuter des instructions SQL.
  • Utilisez finish () API pour libérer la poignée de déclaration.
  • Enfin, si tout va bien, il sera soumis au cours de l'opération.
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 d'entrée et de sortie, suivant l'exemple en substituant placeholders variable pour exécuter une requête d'insertion ?:

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;

l'opération de mise à jour

étapes:

  • Utiliser la préparation () API préparé des instructions SQL.
  • Utilisez execute () API pour exécuter des instructions SQL.
  • Utilisez finish () API pour libérer la poignée de déclaration.
  • Enfin, si tout va bien, il sera soumis au cours de l'opération.
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 d'entrée et de sortie, suivant l'exemple en substituant placeholders variable pour exécuter une requête de mise à jour ?:

$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();

Bien sûr, nous pouvons également lier la valeur à être définie comme suit pour le pays devra modifier le alexa 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:

  • Utiliser la préparation () API préparé des instructions SQL.
  • Utilisez execute () API pour exécuter des instructions SQL.
  • Utilisez finish () API pour libérer la poignée de déclaration.
  • Enfin, si tout va bien, il sera soumis au cours de l'opération.

Les données suivantes seront des sites dans les données de alexa est supérieur à 1000 sont supprimés:

$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;

Utiliser faire la déclaration

ne peuvent effectuer des déclarations UPDATE, INSERT ou DELETE opération, il est assez court, l' exécution réussie renvoie true, échoue , elle retourne false, les exemples sont les suivants:

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

COMMIT opération

engager à valider la transaction pour terminer l'opération de la base de données:

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

opération ROLLBACK

Si une erreur se produit pendant l'exécution de SQL, vous pouvez restaurer les données sans aucun changement:

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

affaires

Et d'autres langues, perl DBI fonctionnement de la base de données prend également en charge le traitement des transactions, il y a deux façons d'y parvenir:

1, dans le cadre de la base de données quand il a commencé une opération

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

Le code ci-dessus au moment de la connexion établie AutoCommit est fausse, qui est, quand vous mettez à jour l'opération de base de données, il ne met pas automatiquement celles écrites directement à la base de données, mais au programme par $ dbh-> engager à de sorte que les données réellement écrites dans la base de données, ou $ dbh-> rollback pour faire reculer l'opération.

2, par $ dbh-> begin_work () pour démarrer une transaction

De cette façon, il n'y a pas besoin de mettre AutoCommit = 0 dans le temps de connexion de base de données.

Vous pouvez connecter une opération de transaction de base de données à plusieurs reprises, pas toutes les transactions commencent à se connecter à une base de données.

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

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

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

Déconnectez la connexion de base de données

Si nous avons besoin de se déconnecter de la base de données, vous pouvez utiliser l'API de déconnexion:

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