2016-10-12 3 views
-2

Это мой init.phpКак проверить, существует ли электронная почта в базе данных или нет?

<?php 
session_start(); 

$GLOBALS['config'] = array(
'mysql' => array(
    'host' => '127.0.0.1', 
    'username' => 'root', 
    'password' => '', 
    'db' => 'mostwanted' 
), 
'remember' => array(
    'cookie_name' => 'hash', 
    'cookie_expiry' => 604800 
), 
'session' => array(
    'session_name' => 'user', 
    'token_name' => 'token' 
) 
); 

spl_autoload_register(function($class) { 
require_once 'classes/' . $class . '.php'; 
}); 

require_once 'functions/sanitize.php'; 

И это мой DB.php

class DB { 

private static $_instance = null; 

private $_pdo, 
     $_query, 
     $_error = false, 
     $_results, 
     $_count = 0; 

private function __construct() { 

    try { 

     $this->_pdo = new PDO(
      'mysql:host=' . 
      Config::get('mysql/host') . 
      ';dbname=' . Config::get('mysql/db'), 
      Config::get('mysql/username'), 
      Config::get('mysql/password')); 

    } catch(PDOException $e) { 

     die($e->getMessage()); 

    } 

} 

public static function getInstance() { 

    if(!isset(self::$_instance)) { 

     self::$_instance = new DB(); 

    } 

    return self::$_instance; 

} 

public function query($sql, $params = array()) { 

    $this->_error = false; 

    if($this->_query = $this->_pdo->prepare($sql)) { 

     $x = 1; 

     if(count($params)) { 

      foreach($params as $param) { 

       $this->_query->bindValue($x, $param); 
       $x++; 

      } 

     } 

     if($this->_query->execute()) { 

      $this->_results = $this->_query->fetchAll(PDO::FETCH_OBJ); 
      $this->_count = $this->_query->rowCount(); 

     } 

     else { 

      $this->_error = true; 

     } 

    } 

    return $this; 

} 

public function action($action, $table, $where = array()) { 

    if(count($where) === 3) { 

     $operators = array('=', '>', '<', '>=', '<='); 

     $field  = $where[0]; 
     $operator = $where[1]; 
     $value  = $where[2]; 

     if(in_array($operator, $operators)) { 

      $sql = "{$action} FROM {$table} WHERE {$field} {$operator} ?"; 

      if(!$this->query($sql, array($value))->error()) { 

       return $this; 

      } 

     } 
    } 
    return false; 
} 


public function get($table, $where) { 

    return $this->action('SELECT *', $table, $where); 

} 

public function insert($table, $fields = array()) { 

    $keys = array_keys($fields); 
    $values = null; 
    $x = 1; 

    foreach($fields as $field) { 

     $values .= "?"; 

     if($x < count($fields)) { 

      $values .= ', '; 

     } 

     $x++; 


     $sql = "INSERT INTO users (`" . implode('`,`', $keys) . "`) VALUES  ({$values})"; 

     if($this->query($sql, $fields)->error()) { 

      return true; 

     } 

     echo $sql; 

    } 

    return false; 

} 

public function update($table, $id, $fields) { 

    $set = ''; 
    $x = 1; 

    foreach($fields as $name => $value) { 

     $set .= "{$name} = ?"; 
     if($x < count($fields)) { 

      $set .= ', '; 

     } 

     $x++; 

    } 

    $sql = "UPDATE {$table} SET {$set} WHERE user_id = {$id}"; 

    if(!$this->query($sql, $fields)->error()) { 

     return true; 

    } 

    return false; 

} 

public function delete($table, $where) { 

    return $this->action('DELETE', $table, $where); 

} 

public function results() { 

    return $this->_results; 

} 

public function first() { 

    return $this->results()[0]; 

} 

public function error() { 

    return $this->_error; 

} 

public function count() { 

    return $this->_count; 

} 

} 

Я не уверен, должен ли я изменить __construct() к публичной функции или не называть его в мой register.php, где я пытаюсь выяснить, находится ли в базе данных электронное письмо в базе данных или нет.

$query = DB::__construct()->prepare("SELECT email FROM users WHERE email = ?"); 
$query->bindValue(1, $email); 
$query->execute(); 

if($query->rowCount() > 0) # If rows are found for query 
{ 
echo "Email has already been registered"; 
} 
else 
{ 
echo "Email has not been registered before"; 
} 

я получу «Фатальная ошибка: Ошибка неперехваченным: Non-статический метод DB :: __ конструкт() не может быть вызвана статически в C: \ XAMPP \ HTDOCS \ MostWanted \ register.php: 4 стека трассировки: # 0 {main} выбрано в C: \ xampp \ htdocs \ MostWanted \ register.php в строке 4 ", когда я печатаю по электронной почте.

+0

так что код делает нт работает? какая часть? – nogad

+0

В register.php. Я уверен, что соединение с БД сделано, но я понятия не имею, как использовать это соединение для доступа к столбцу электронной почты без изменения частной функции на публичную. – maftyycs

ответ

0

Частный конструктор является признаком того, что класс реализован как шаблон Singleton (очень распространенный в классах, используемых для доступа к базе данных).

Посмотрите на другой общедоступный метод, вероятно, что-то вроде «например()», «деЫпзЬапс()», «GetConnection» ...

Смежные вопросы