So-cold
Новичок
Вот уже второй день не покидает мысль о том, что я не правильно делаю логику в приложение:
Сделал класс соединения с бд и с методами выборки :
И второй класс юзер, который наследуют класс работы с бд и использует у себя некоторые его методы:
Сделал класс соединения с бд и с методами выборки :
PHP:
<?php
namespace Modules;
use PDO;
class MySqlDatabase
{
protected $_db;
public $last_query;
const DB_DSN = 'mysql:host=localhost;dbname=photo_gallery';
const DB_USER = "admin";
const DB_PASS = "123qwe";
//Connection to DB
public function __construct()
{
try {
$this->_db = new PDO(self::DB_DSN, self::DB_USER, self::DB_PASS);
$this->_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (\PDOException $e) {
echo "Connection error: " . $e->getMessage();
exit;
}
}
//Close connection
public function __destruct()
{
unset($this->_db);
}
//Our query without result
public function exec($sql)
{
try {
$res = $this->_db->exec($sql);
return $res;
} catch (\PDOException $e) {
echo $e->getMessage() . "<br/>";
echo $this->last_query = $sql;
}
}
//Our query from Select
public function query($sql)
{
try {
$stmt = $this->_db->query($sql);
$row = $stmt->fetch(PDO::FETCH_ASSOC);
return $row;
} catch (\PDOException $e) {
echo "Query Select error: " . $e->getMessage() . "<br/>";
echo $this->last_query = $sql;
}
}
//PDO number of rows affected by last SQL
public function rowCount()
{
$row = $this->_db->prepare();
$row->execute();
$count = $row->rowCount();
return $count;
}
//PDO last insert
public function lastInsert()
{
return $this->_db->lastInsertId();
}
//Prepare statement Insert
public function prepareInsert($sql, $username, $pass, $fname, $lname)
{
try {
$stmt = $this->_db->prepare($sql);
$stmt->bindParam(":username", $username, PDO::PARAM_STR);
$stmt->bindParam(":password", $pass, PDO::PARAM_STR);
$stmt->bindParam(":first_name", $fname, PDO::PARAM_STR);
$stmt->bindParam(":last_name", $lname, PDO::PARAM_STR);
$stmt->execute();
} catch (\PDOException $e) {
echo "Error prepare: " . $e->getMessage() . "<br/>";
echo $this->last_query = $sql;
}
}
//Prepare statement SelectALL
public function prepareSelectAll($sql, $class)
{
try {
$stmt = $this->_db->prepare($sql);
$stmt->execute();
$data = $stmt->fetchAll(PDO::FETCH_CLASS, $class);
return $data;
} catch (\PDOException $e) {
echo "Error prepareALL: " . $e->getMessage() . "<br/>";
echo $this->last_query = $sql;
}
}
//Prepare statement By ID
public function prepareSelectById($sql, $var1, $class)
{
try {
$stmt = $this->_db->prepare($sql);
$stmt->bindParam(":id", $var1, PDO::PARAM_INT);
$stmt->execute();
$data = $stmt->fetchObject($class);
return $data;
} catch (\PDOException $e) {
echo "Error prepareById: " . $e->getMessage() . "<br/>";
echo $this->last_query = $sql;
}
}
public function prepareSelectByIdAuthenticate($sql, $username,$password, $class)
{
try {
$stmt = $this->_db->prepare($sql);
$stmt->bindParam(":username", $username, PDO::PARAM_STR);
$stmt->bindParam(":password", $password, PDO::PARAM_STR);
$stmt->execute();
$data = $stmt->fetchAll(PDO::FETCH_CLASS, $class);
return $data;
} catch (\PDOException $e) {
echo "Error prepareByIdAuthenticate: " . $e->getMessage() . "<br/>";
echo $this->last_query = $sql;
}
}
}
PHP:
<?php
namespace Modules;
class User extends MySqlDatabase
{
public $id;
public $username;
public $password;
public $first_name;
public $last_name;
//Select all
public function findAll()
{
$sql = "SELECT * FROM users";
$result_set = $this->prepareSelectAll($sql, __CLASS__);
return $result_set;
}
//Find by id
public function findById($id = 0)
{
$sql = "SELECT * FROM users WHERE id =:id LIMIT 1";
$resuls_set = $this->prepareSelectById($sql, $id, __CLASS__);
return $resuls_set;
}
// Function return full name
public function full_name()
{
if (!empty($this->first_name) && !empty($this->last_name)) {
return $this->first_name . " " . $this->last_name;
} else {
return "";
}
}
//
public function authenticate($username = "", $password = "")
{
$sql = "SELECT * FROM users ";
$sql .= " WHERE username = :username ";
$sql .= " AND password = :password ";
$sql .= " LIMIT 1";
$resuls_set = $this->prepareSelectByIdAuthenticate($sql, $username, $password, __CLASS__);
if (!empty($resuls_set)) {
return array_shift($resuls_set);
} else {
return false;
}
}
}