garkavenkov/db-connector

v1.2.0 2023-09-23 10:11 UTC

This package is auto-updated.

Last update: 2024-09-23 12:22:32 UTC


README

DBConnect - PDO类的类包装器。

安装

使用 Composer

composer require garkavenkov/db-connector

使用方法

初始化

有两种方式来设置数据库配置参数。第一种是通过 常量

<?php

require ('./vendor/autoload.php');

use DBConnector\DBConnect;

define('DB_USERNAME', 'username');
define('DB_PASSWORD', 'password');
define('DB_SCHEMA'  , 'schema_name');
define('DB_DRIVER'  , 'database_driver');
define('DB_HOSTNAME', 'hostname');

use DBConnector\DBConnect;

$dbh = DBConnect::getInstance();

第二种是通过在 getInstance() 方法中作为参数的一个 关联数组

<?php

require ('./vendor/autoload.php');

use DBConnector\DBConnect;

$params = array(
    "db_username" => 'username',
    "db_password" => 'password',
    "db_schema"   => 'schema_name',
    "db_driver"   => 'database_driver',
    "db_hostname" => 'hostname'    
);

$dbh = DBConnect::getInstance($params);

默认数据库参数 db_port 为空,因此数据库驱动程序使用其默认端口。如果您需要使用特定的端口号,您必须将其定义为常量

<?php

define('DB_PORT', 9999);

或作为关联数组。

<?php

$params = array(
    .
    .
    .
    "db_port" => 9999
);

方法

exec(string $sql)

执行一个 SQL 语句并返回受影响的行数

<?php

// $dbh initialization

$sql  = "DROP TABLE IF EXISTS test; ";
$sql .= "CREATE TABLE test ( " ;
$sql .=   "id INT NOT NULL AUTO_INCREMENT, ";
$sql .=   "first_name VARCHAR(20) NOT NULL, ";
$sql .=   "last_name VARCHAR(25) NOT NULL, ";
$sql .=   "PRIMARY KEY(id)";
$sql .= ") ENGINE=InnoDB DEFAULT CHARSET=UTF8";

$dbh->exec($sql);

$sql  = "INSERT INTO `test` (`first_name`, `last_name` ) VALUES ";
$sql .= "('John', 'Doe'),('Jane', 'Smith')";

$res = $dbh->exec($sql);
echo "Records were inserted: $res" . PHP_EOL;

输出

Records were inserted: 2

query(string $sql)

执行一个 SQL 语句并返回一个包含结果集作为 PDOStatement 对象的 DBConnect 对象。

例如,此代码设置UTF8编码

<?php

$sql = "SELECT * FROM `test`";
$dbh->query($sql);

var_dump($dbh);

输出

object(DBConnector\DBConnect)#1 (2) {
  ["dbh":"DBConnector\DBConnect":private]=>
  object(PDO)#2 (0) {
  }
  ["stmt":"DBConnector\DBConnect":private]=>
  object(PDOStatement)#3 (1) {
    ["queryString"]=>
    string(20) "SELECT * FROM `test`"
  }
}

在此方法之后,您可以调用另一个与 PDOStatement 对象一起工作的方法。例如 getRow()

getRow($fetch_style = null)

从一个结果集中获取一行。$fetch_style 决定了 PDO 如何返回行。默认使用 PDO::FETCH_ASSOC

<?php

$sql = "SELECT * FROM `test`";
$row = $dbh->query($sql)->getRow();
var_dump($row);
echo "Character: " . $person['first_name'] . " " . $person['last_name'] . PHP_EOL;

输出

array(3) {
  ["id"]=>
  string(1) "1"
  ["first_name"]=>
  string(4) "John"
  ["last_name"]=>
  string(4) "Doe"
}
Character: John Doe

要获取结果为 对象,请使用 PDO::FETCH_OBJ

<?php

$sql = "SELECT * FROM `test`";
$row = $dbh->query($sql)->getRow(PDO::FETCH_OBJ);
var_dump($row);
echo "Character: " . $person->first_name . " " . $person->last_name . PHP_EOL;

输出

object(stdClass)#4 (3) {
  ["id"]=>
  string(1) "1"
  ["first_name"]=>
  string(4) "John"
  ["last_name"]=>
  string(4) "Doe"
}
Character: John Doe

getRows($fetch_style = null)

返回一个包含所有结果集行的数组。结果取决于 $fetch_style。默认使用 PDO::FETCH_ASSOC

<?php

$sql = "SELECT * FROM `test`";
$persons = $dbh->query($sql)->getRows();

foreach($persons as $person) {
    echo "Character: " . $person['first_name'] . " " . $person['last_name'] . PHP_EOL;
}
Character: John Doe
Character: Jane Smith

prepare(string $sql, $standalone = false)

准备一个 SQL 语句以执行,并返回包含准备好的 PDOstatement 的 DBConnect 对象。

<?php
$sql  = "INSERT INTO `test` (`first_name`, `last_name`) ";
$sql .= "VALUES (:first_name, :last_name)";

$stmt = $dbh->prepare($sql);
var_dump($stmt)

输出

object(DBConnector\DBConnect)#1 (2) {
  ["dbh":"DBConnector\DBConnect":private]=>
  object(PDO)#2 (0) {
  }
  ["stmt":"DBConnector\DBConnect":private]=>
  object(PDOStatement)#3 (1) {
    ["queryString"]=>
    string(79) "INSERT INTO `test` (`first_name`, `last_name`) VALUES (:first_name, :last_name)"
  }
}

如果您设置 $standalone=true,此方法将返回一个 PDOstatement 对象而不是 DBConnect 对象。

$sql  = "INSERT INTO `test` (`first_name`, `last_name`) ";
$sql .= "VALUES (:first_name, :last_name)";

$stmt = $dbh->prepare($sql, true);
var_dump($stmt)

输出

object(PDOStatement)#3 (1) {
  ["queryString"]=>
  string(79) "INSERT INTO `test` (`first_name`, `last_name`) VALUES (:first_name, :last_name)"
}

execute(array $params, $stmt = null)

执行一个准备好的语句。

<?php
$sql  = "INSERT INTO `test` (`fist_name`, `last_name`) ";
$sql .= "VALUES (:first_name, :lst_name)";

$param = [
    ':first_name' => 'Fhil',
    ':last_name'  => 'Johnson'
];

$dbh->prepare($sql)->execute($param);

如果您设置了 $stmt 参数,此方法将执行 独立 的准备好的语句。

<?php

getLastInsertedId()

返回最后插入记录的 Id

<?php
$sql  = "INSERT INTO `test` (`fist_name`, `last_name`) ";
$sql .= "VALUES (:first_name, :last_name)";

$param = [
    ':first_name' => 'Fhil',
    ':last_name'  => 'Johnson'
];

$dbh->prepare($sql)->execute($param);

$id = $dbh->getLastInsertedId();
echo "Id: $id" . PHP_EOL;

输出

Id: 3

getFieldValue(string $field_name)

返回特定字段的值

<?php

$sql = "SELECT * FROM `test` WHERE `id` = 1";
$name = $dbh->query($sql)->getFieldValue('first_name');

echo "Name: $name" . PHP_EOL;

输出

Name: John

getFieldValues(string $field_name)

返回一个包含给定字段值的数组

<?php

$sql = "SELECT * FROM `test`";

$names = $dbh->query($sql)->getFieldValues('first_name');

print_r($names); 

输出

Array
(
    [0] => John
    [1] => Jane
    [2] => Fhil
)

rowCount()

返回最后 SQL 语句影响的行数。

<? php

$sql = "SELECT *  FROM `test`";
$count = $dbh->query($sql)->rowCount();
echo "Count: $count" . PHP_EOL;

输出

Count: 3

closeCursor()

关闭下一次执行的光标。

getAvailableDrivers()

返回一个包含可用 PDO 驱动程序的数组。

<?php

$drivers = $dbh->getAvailableDrivers();
print_r($drivers);

输出

Array
(
    [0] => mysql
    [1] => sqlite
)