Clase pequeña para trabajar con bases de datos (PDO)

¡Hola, Habr! Se han escrito muchos artículos sobre la DOP, pero muy pocos ejemplos de la vida real. En este artículo, quiero presentar mi versión de la clase para trabajar con una base de datos (en lo sucesivo, DB). Este artículo será útil para los programadores novatos que recién están dominando esta tecnología.





¡Atención! Mi opinión puede diferir de la suya, por lo que quiero decir de inmediato que este artículo no es la verdad última y la implementación de esta clase depende del programador y sus preferencias.





Introducción

Comencemos con la clase DB.





<?php 

	// use PDO -     ,   
	//  namespace .     
	//       -  
	use PDO;

	class DB
	{

		public function __construct()
		{
			
		}

	}

?>
      
      



Aquí, creo, todo está claro, estas cosas no necesitan explicarse.





.





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

?>
      
      



:





datos de la base de datos

, .





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

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

?>
      
      



datos de la base de datos

. .





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



:





datos de la base de datos

, , .





Al final del artículo, quiero repetirme y decir que mi implementación no es perfecta , pero aún así esta clase funciona y realiza su función principal: funciona con una base de datos. Espero que este artículo te haya sido útil.









Enlace a github : clase DB








All Articles