こんにちは、Habr!PDOについては多くの記事が書かれていますが、実際の例はほとんどありません。この記事では、データベース(以下、DBと呼びます)を操作するためのクラスのバージョンを紹介します。この記事は、このテクノロジーをマスターしたばかりの初心者プログラマーに役立ちます。
注意!私の意見はあなたの意見とは異なるかもしれないので、この記事は究極の真実ではなく、このクラスの実装はプログラマーと彼の好みに依存することをすぐに言いたいと思います。
前書き
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'));
?>
:
, , .
記事の最後で、繰り返して、私の実装は完全ではないと言いたいのですが、それでもこのクラスは機能し、その主要な機能を実行します-それはデータベースで機能します。この記事がお役に立てば幸いです。
githubへのリンク:クラスDB