Halo, Habr! Ada banyak artikel yang ditulis tentang PDO, tetapi sangat sedikit contoh kehidupan nyata. Pada artikel ini, saya ingin menyajikan versi kelas saya untuk bekerja dengan database (selanjutnya disebut sebagai DB). Artikel ini akan bermanfaat bagi programmer pemula yang baru menguasai teknologi ini.
Perhatian! Pendapat saya mungkin berbeda dari Anda, jadi saya ingin segera mengatakan bahwa artikel ini bukanlah kebenaran tertinggi dan penerapan kelas ini tergantung pada programmer dan preferensinya.
pengantar
Mari kita mulai dengan kelas DB.
<?php
// use PDO - ,
// namespace .
// -
use PDO;
class DB
{
public function __construct()
{
}
}
?>
, , , .
.
<?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'));
?>
:
, , .
Di akhir artikel, saya ingin mengulang dan mengatakan bahwa implementasi saya tidak sempurna , tetapi kelas ini tetap berfungsi dan menjalankan fungsi utamanya - ia bekerja dengan database. Saya harap artikel ini bermanfaat untuk Anda.
Tautan ke github : class DB