Petite classe pour travailler avec des bases de données (PDO)

Bonjour, Habr! Il y a beaucoup d'articles écrits sur l'AOP, mais très peu d'exemples réels. Dans cet article, je souhaite présenter ma version de la classe pour travailler avec une base de données (ci-après dénommée DB). Cet article sera utile pour les programmeurs novices qui maîtrisent juste cette technologie.





Attention! Mon opinion peut différer de la vôtre, je veux donc dire tout de suite que cet article n'est pas la vérité ultime et que l'implémentation de cette classe dépend du programmeur et de ses préférences.





introduction

Commençons par la classe 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'));

?>
      
      



:





données de la base de données

, .





<?php
	
	// class DB {...} 
	//  
	$db = new DB;

	//    
	echo "<pre>";
	print_r($db->getRow('posts'));

?>
      
      



données de la base de données

. .





<?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'));
?>
      
      



:





données de la base de données

, , .





À la fin de l'article, je veux me répéter et dire que mon implémentation n'est pas parfaite , mais cette classe fonctionne toujours et remplit sa fonction principale - elle fonctionne avec une base de données. J'espère que cet article vous a été utile.









Lien vers github : class DB








All Articles