2016-10-12 13 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; 

} 

} 

私は私register.phpにそれを呼び出すために、公共の機能に__construct()を変更すべきか否かわからないんだけど、スペースに入力された電子メールがデータベースにあるかどうかを調べようとしています。

$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"; 
} 

私は「致命的なエラーが発生します。不明なエラーを:非静的メソッドDB :: __構築物()Cで静的に呼び出すことができません:\ xamppの\ htdocsに\ MostWanted \ register.php:4スタックトレース:#私が電子メールを入力すると、C:\ xampp \ htdocs \ MostWanted \ register.phpの4行目に{main}がスローされました。

+0

ので、コードが動作し、NTのですか?どの部分? – nogad

+0

register.phpにあります。私はかなりDBへの接続が行われていると確信していますが、私はパブリックに私的な機能を変更することなく電子メールの列にアクセスするためにその接続を使用する方法を知りません。 – maftyycs

答えて

0

プライベートコンストラクタは、クラスがシングルトンパターンとして実装されていることを示す記号です(データベースアクセスに使用されるクラスでは非常に一般的です)。別のパブリックメソッドの

見て、 "インスタンス()" のように、おそらく何か、 "のgetInstance()"、 "のgetConnection" ...

関連する問題