Latest web development tutorials

اتصال قاعدة البيانات بيرل

هذا الفصل سوف أعرض لكم لربط قاعدة بيانات بيرل.

بيرل 5، يمكننا استخدام وحدة DBI للاتصال قاعدة البيانات.

اسم DBI الإنجليزية: واجهة المستقلة قاعدة البيانات، ودعا الصينية واجهة قاعدة بيانات مستقلة.

كما DBI واجهة قاعدة بيانات الاتصالات الموحدة لغة بيرل، الذي يحدد مجموعة من الأساليب والمتغيرات والثوابت، وتوفير قاعدة بيانات منصة مستقلة طبقة معينة قاعدة بيانات المثابرة.


هيكل DBI

DBI وخاصة قاعدة بيانات منصة مستقلة، ونحن يمكن تطبيقه في Oracle و MySQL أو ينفورميكس، وغيرها من قواعد البيانات.

الحصول على جميع الرسم البياني DBI API (واجهة برمجة التطبيقات: واجهة برمجة التطبيقات) المرسلة من البيانات SQL، ومن ثم توزيعها على برنامج التشغيل المناسب على التنفيذ، وأخيرا الحصول على البيانات مرة أخرى.

اتفاقيات اسم متغير

المجموعة التالية من اسم أكثر شيوعا من تسمية المتغير:

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

اتصال قواعد البيانات

وبعد ذلك، علينا أن نبرهن بيرل مع قاعدة بيانات 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.
  • استخدام تنفيذ () 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 () للافراج عن مقبض عبارة.
  • وأخيرا، إذا سارت الامور بشكل جيد سيتم تقديمه خلال العملية.

البيانات التالية سوف مواقع في بيانات اليكسا هو أكبر من 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;

استخدام تفعل بيان

لا بيانات يمكن إجراء التحديث، إدراج، أو حذف العملية، فهو قصير جدا، والتنفيذ الناجح يعود صحيحا، فشل فإنها ترجع كاذبة، والأمثلة على النحو التالي:

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

ارتكاب عملية

تلتزم تنفيذ المعاملة لإكمال العملية من قاعدة البيانات:

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

عملية التراجع

إذا حدث خطأ أثناء تنفيذ SQL، يمكنك استعادة البيانات دون أي تغيير:

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

شئون

وغيرها من اللغات، بيرل عملية 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;