Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d9bc65418f | ||
|
|
76e69d6054 | ||
|
|
f6cfe6f117 |
No files matched your search
+24
-87
@@ -12,31 +12,36 @@ class Database
|
|||||||
*/
|
*/
|
||||||
private $driver;
|
private $driver;
|
||||||
|
|
||||||
public function __construct(
|
/**
|
||||||
|
* @param PDO $pdo
|
||||||
|
*/
|
||||||
|
public function __construct($pdo)
|
||||||
|
{
|
||||||
|
$this->driver = $pdo;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $dsn
|
||||||
|
* @param string|null $username
|
||||||
|
* @param string|null $password
|
||||||
|
* @param array|null $options
|
||||||
|
* @return self
|
||||||
|
*/
|
||||||
|
public static function create(
|
||||||
$dsn,
|
$dsn,
|
||||||
$username = null,
|
$username = null,
|
||||||
$password = null,
|
$password = null,
|
||||||
$options = null
|
$options = null
|
||||||
) {
|
) {
|
||||||
if ($dsn instanceof PDO) {
|
$pdo = new PDO($dsn, $username, $password, (array) $options);
|
||||||
$this->driver = $dsn;
|
|
||||||
} else {
|
|
||||||
$this->driver = new PDO(
|
|
||||||
$dsn,
|
|
||||||
$username,
|
|
||||||
$password,
|
|
||||||
array_merge([
|
|
||||||
PDO::MYSQL_ATTR_INIT_COMMAND, 'SET sql_mode="ANSI,TRADITIONAL"'
|
|
||||||
], (array) $options)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->driver->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
||||||
$this->driver->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
|
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
|
||||||
$this->driver->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_CLASS);
|
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
|
||||||
$this->driver->setAttribute(PDO::ATTR_STATEMENT_CLASS, [Statement::class]);
|
|
||||||
|
|
||||||
$this->driver->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
|
$pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
|
||||||
|
|
||||||
|
return new self($pdo);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function driver()
|
public function driver()
|
||||||
@@ -57,20 +62,6 @@ class Database
|
|||||||
return $stmt;
|
return $stmt;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* giống exec() nhưng dùng prepare
|
|
||||||
*
|
|
||||||
* @param string $sql
|
|
||||||
* @param array|null $params
|
|
||||||
* @return int
|
|
||||||
*/
|
|
||||||
public function query_count($sql, $params = null)
|
|
||||||
{
|
|
||||||
$stmt = self::query($sql, $params);
|
|
||||||
|
|
||||||
return $stmt->rowCount();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $table
|
* @param string $table
|
||||||
* @param array $params
|
* @param array $params
|
||||||
@@ -79,7 +70,7 @@ class Database
|
|||||||
public function insert($table, $params)
|
public function insert($table, $params)
|
||||||
{
|
{
|
||||||
$sql = 'insert into "' . $table . '"'
|
$sql = 'insert into "' . $table . '"'
|
||||||
. ' (' . implode(',', $this->buildName(array_keys($params))) . ')'
|
. ' (' . implode(',', $this->build_name(array_keys($params))) . ')'
|
||||||
. ' values (' . implode(',', array_fill(0, count($params), '?')) . ')';
|
. ' values (' . implode(',', array_fill(0, count($params), '?')) . ')';
|
||||||
//dd($sql);
|
//dd($sql);
|
||||||
$this->query($sql, array_values($params));
|
$this->query($sql, array_values($params));
|
||||||
@@ -125,17 +116,6 @@ class Database
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $sql
|
|
||||||
* @param array|null $params
|
|
||||||
* @return int
|
|
||||||
*/
|
|
||||||
public function update($sql, $params = null)
|
|
||||||
{
|
|
||||||
$stmt = $this->query($sql, $params);
|
|
||||||
return $stmt->rowCount();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $sql
|
* @param string $sql
|
||||||
* @param array|null $params
|
* @param array|null $params
|
||||||
@@ -151,16 +131,6 @@ class Database
|
|||||||
return $this->driver->exec($sql);
|
return $this->driver->exec($sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $sql
|
|
||||||
* @param array|null $params
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public function fetchAll($sql, $params = null)
|
|
||||||
{
|
|
||||||
return $this->query($sql, $params)->fetchAll();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $sql
|
* @param string $sql
|
||||||
* @param array|null $params
|
* @param array|null $params
|
||||||
@@ -171,18 +141,6 @@ class Database
|
|||||||
return $this->query($sql, $params)->fetchAll();
|
return $this->query($sql, $params)->fetchAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $sql
|
|
||||||
* @param array|null $params
|
|
||||||
* @param int $column
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public function fetchColumn($sql, $params = null, $column = 0)
|
|
||||||
{
|
|
||||||
$stmt = $this->query($sql, $params);
|
|
||||||
return $stmt->fetchColumn($column);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $sql
|
* @param string $sql
|
||||||
* @param array|null $params
|
* @param array|null $params
|
||||||
@@ -195,16 +153,6 @@ class Database
|
|||||||
return $stmt->fetchColumn($column);
|
return $stmt->fetchColumn($column);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param int $page
|
|
||||||
* @param int $per_page
|
|
||||||
* @return int
|
|
||||||
*/
|
|
||||||
public function getOffset($page, $per_page)
|
|
||||||
{
|
|
||||||
return $page * $per_page - $per_page;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param int $page
|
* @param int $page
|
||||||
* @param int $per_page
|
* @param int $per_page
|
||||||
@@ -224,17 +172,6 @@ class Database
|
|||||||
return $this->driver->quote($str);
|
return $this->driver->quote($str);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param array $arr
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public function buildName($arr)
|
|
||||||
{
|
|
||||||
return array_map(function ($item) {
|
|
||||||
return '"' . $item . '"';
|
|
||||||
}, $arr);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param array $arr
|
* @param array $arr
|
||||||
* @return array
|
* @return array
|
||||||
|
|||||||
@@ -1,27 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Nightmare\Database;
|
|
||||||
|
|
||||||
use ArrayObject;
|
|
||||||
|
|
||||||
class Row extends ArrayObject
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @param string $name
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public function __get($name)
|
|
||||||
{
|
|
||||||
return $this[$name];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $name
|
|
||||||
* @param mixed $val
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function __set($name, $val)
|
|
||||||
{
|
|
||||||
$this[$name] = $val;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Nightmare\Database;
|
|
||||||
|
|
||||||
use PDOStatement;
|
|
||||||
use PDO;
|
|
||||||
|
|
||||||
class Statement extends PDOStatement
|
|
||||||
{
|
|
||||||
protected function __construct()
|
|
||||||
{
|
|
||||||
$this->setFetchMode(PDO::FETCH_CLASS, Row::class);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in new issue
Block a user