Latest web development tutorials

conexión de base de Perl

En este capítulo vamos a introducir la conexión de base de datos de Perl.

Perl 5, se puede utilizar el módulo DBI para conectarse a la base de datos.

Nombre DBI Inglés: Base de datos Interfaz Independiente, chino llamado interfaz de base de datos independiente.

Como DBI y el estándar de comunicación de interfaz de base de datos lenguaje Perl, que define un conjunto de métodos, variables y constantes, y proporcionar una base de datos específica capa de persistencia de base de datos independiente de la plataforma.


estructura de DBI

DBI base de datos y en particular independiente de la plataforma, podemos aplicarlo en Oracle, MySQL o Informix y otras bases de datos.

Obtenga toda la tabla de DBI API (Application Programming Interface: Interfaz de programación de aplicaciones) enviado a partir de datos SQL, y luego distribuido a los controladores correspondientes en la aplicación, y, finalmente, obtener los datos de nuevo.

convenciones de los nombres de variables

El siguiente conjunto de la denominación más común de la variable de nombres:

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

La conectividad de base de datos

A continuación, demostramos Perl con la base de datos MySQL como un ejemplo de cómo las operaciones de base de datos.

Aquí creamos una base de datos MySQL en los sitios web de tablas de datos w3big base de datos, estructura de la tabla y los datos se muestra a continuación:

Descargar la hoja de datos: http://static.w3big.com/download/websites_perl.sql

A continuación, se utiliza el siguiente código para conectarse a la base de datos:

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

Insertar

pasos:

  • Utilice prepare () API preparó sentencias SQL.
  • Utilice ejecutar () de la API para ejecutar sentencias SQL.
  • Utilice acabado API () para liberar el identificador de instrucción.
  • Por último, si todo va bien que va a ser presentado durante la operación.
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;

La aplicación también puede obligar a los parámetros de entrada y de salida, siguiendo el ejemplo mediante la sustitución de los marcadores de posición variable para ejecutar una consulta de inserción ?:

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;

operación de actualización

pasos:

  • Utilice prepare () API preparó sentencias SQL.
  • Utilice ejecutar () de la API para ejecutar sentencias SQL.
  • Utilice acabado API () para liberar el identificador de instrucción.
  • Por último, si todo va bien que va a ser presentado durante la operación.
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;

La aplicación también puede obligar a los parámetros de entrada y de salida, siguiendo el ejemplo mediante la sustitución de los marcadores de posición variable para realizar una consulta de actualización ?:

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

Por supuesto, también podemos enlazar el valor que se establece de la siguiente manera para el país tendrá que modificar el alexa NC 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();

eliminar los datos

pasos:

  • Utilice prepare () API preparó sentencias SQL.
  • Utilice ejecutar () de la API para ejecutar sentencias SQL.
  • Utilice acabado API () para liberar el identificador de instrucción.
  • Por último, si todo va bien que va a ser presentado durante la operación.

Los siguientes datos web sitios en los datos de Alexa es mayor que 1000 se suprimen:

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

Uso hacer declaración

no pueden realizar declaraciones UPDATE, INSERT o DELETE operación, que es bastante corto, la exitosa ejecución devuelve verdadero, no devuelve falso, ejemplos son los siguientes:

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

COMMIT operación

comprometerse a confirmar la transacción para completar la operación de la base de datos:

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

operación de reversión

Si se produce un error durante la ejecución de SQL, puede hacer retroceder los datos sin ningún cambio:

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

negocios

Y otros idiomas, Perl DBI funcionamiento de la base de datos también es compatible con el procesamiento de transacciones, hay dos formas de lograrlo:

1, en conexión con la base de datos cuando se inició una transacción

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

El código de seguridad en el momento del establecimiento de la conexión AutoCommit es falsa, es decir, cuando se actualiza la operación de base de datos, no se actualiza automáticamente las escritas directamente a la base de datos, pero con el programa por $ dbh-> comprometen a de manera que los datos realmente escriben en la base de datos, o $ dbh-> rollback para hacer retroceder la operación.

2, por $ dbh-> begin_work () para iniciar una transacción

De esta manera no hay necesidad de ajustar AutoCommit = 0 en el tiempo de conexión de base de datos.

Se puede conectar una operación de transacción de la base de datos varias veces, no todas las transacciones están empezando a conectarse a una base de datos.

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

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

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

Desconectar la conexión de base de datos

Si necesitamos para desconectarse de la base de datos, puede utilizar la API de desconexión:

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