データベース(PDO)を操作するための小さなクラス

こんにちは、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








All Articles