Olá, Habr! Muitos artigos foram escritos sobre PDO, mas muito poucos exemplos da vida real. Neste artigo, quero apresentar minha versão da aula para trabalhar com banco de dados (doravante denominada DB). Este artigo será útil para programadores novatos que estão apenas dominando essa tecnologia.
Atenção! Minha opinião pode ser diferente da sua, então quero dizer imediatamente que este artigo não é a verdade suprema e a implementação dessa classe depende do programador e de suas preferências.
Introdução
Vamos começar com a classe DB.
<?php
// use PDO - ,
// namespace .
// -
use PDO;
class DB
{
public function __construct()
{
}
}
?>
Aqui, eu acho, está tudo claro, essas coisas não precisam ser explicadas.
.
<?php
use PDO;
class DB
{
// , PDO
private $db;
public function __construct()
{
// dbinfo.php
//
$dbinfo = require 'path/to/dbinfo.php';
//
$this->db = new PDO('mysql:host=' . $dbinfo['host'] . ';dbname=' . $dbinfo['dbname'], $dbinfo['login'], $dbinfo['password']);
}
}
?>
, . , SQL .
<?php
use PDO;
class DB
{
// PDO
private $db;
//
public function __construct()
{
$dbinfo = require 'path/to/dbinfo.php';
$this->db = new PDO('mysql:host=' . $dbinfo['host'] . ';dbname=' . $dbinfo['dbname'], $dbinfo['login'], $dbinfo['password']);
}
//
public function query($sql, $params = [])
{
}
}
?>
query
, :
" ?"
:
$sql
- SQL .
$params
- - .
?
, , , . :
<?php
$sql = "SELECT * FROM `table` WHERE id = :id";
$params = [
'id' => 5
];
?>
: " ?" - , SQL .
:
$params
.
, . :
<?php
use PDO;
class DB
{
// PDO
private $db;
//
public function __construct()
{
$dbinfo = require 'path/to/dbinfo.php';
$this->db = new PDO('mysql:host=' . $dbinfo['host'] . ';dbname=' . $dbinfo['dbname'], $dbinfo['login'], $dbinfo['password']);
}
//
public function query($sql, $params = [])
{
//
$stmt = $this->db->prepare($sql);
//
//
if ( !empty($params) ) {
foreach ($params as $key => $value) {
$stmt->bindValue(":$key", $value);
}
}
//
$stmt->execute();
//
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
}
?>
,
, SQL, . , , :
getAll()
- ,
getRow()
- ,
, .
<?php
use PDO;
class DB
{
// PDO
private $db;
//
public function __construct()
{
$dbinfo = require 'path/to/dbinfo.php';
$this->db = new PDO('mysql:host=' . $dbinfo['host'] . ';dbname=' . $dbinfo['dbname'], $dbinfo['login'], $dbinfo['password']);
}
//
public function query($sql, $params = [])
{
//
$stmt = $this->db->prepare($sql);
//
//
if ( !empty($params) ) {
foreach ($params as $key => $value) {
$stmt->bindValue(":$key", $value);
}
}
//
$stmt->execute();
//
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
public function getAll($table, $sql = '', $params = [])
{
return $this->query("SELECT * FROM $table" . $sql, $params);
}
public function getRow($table, $sql = '', $params = [])
{
$result = $this->query("SELECT * FROM $table" . $sql, $params);
return $result[0];
}
}
?>
, , .
, , .
:
getOne()
-
getCol()
- 1
..
. "".
. , posts. .
DB
. , , .
dbinfo.php - .
<?php
//
return [
'host' => '127.0.0.1',
'dbname' => 'test',
'login' => 'root',
'password' => ''
];
?>
, . , test
.
<?php
// class DB {...}
//
$db = new DB;
//
echo "<pre>";
print_r($db->getAll('posts'));
?>
:
, .
<?php
// class DB {...}
//
$db = new DB;
//
echo "<pre>";
print_r($db->getRow('posts'));
?>
. .
<?php
// class DB {...}
//
$db = new DB;
//
echo "<h1></h1><pre>";
print_r($db->getAll('posts'));
echo "</pre><h1></h1><pre>";
$params = [
'title' => ' PHP',
'author' => ' PHP'
];
$db->query('INSERT INTO `posts` ( title, author ) VALUES ( :title, :author )', $params);
print_r($db->getAll('posts'));
?>
:
, , .
No final do artigo, quero me repetir e dizer que minha implementação não é perfeita , mas ainda assim esta classe funciona e executa sua função principal - ela funciona com um banco de dados. Espero que este artigo tenha sido útil para você.
Link para github : class DB