2016-10-12 4 views
-2

Das ist mein init.phpWie kann ich überprüfen, ob eine E-Mail in der Datenbank vorhanden ist oder nicht?

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

Und das ist mein 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; 

} 

} 

Ich bin nicht sicher, ob ich __construct() zu einer öffentlichen Funktion ändern sollte oder nicht, es in meine register.php zu nennen, Ich versuche herauszufinden, ob die E-Mail, die in den Space eingegeben wurde, in der Datenbank enthalten ist oder nicht.

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

Ich werde „Fatal Fehler: Nicht abgefangene Fehler: Nicht-statische Methode DB :: __ construct() kann nicht statisch in C genannt werden: \ xampp \ htdocs \ Mostwanted \ register.php: 4-Stack-Trace: # 0 {main} geworfen in C: \ xampp \ htdocs \ MostWanted \ register.php in Zeile 4 ", wenn ich eine E-Mail eintippe.

+0

so wird der Code nt arbeiten? welcher Teil? – nogad

+0

In der register.php. Ich bin ziemlich sicher, dass die Verbindung zur DB hergestellt wird, aber ich habe keine Ahnung, wie man diese Verbindung benutzt, um auf die E-Mail-Spalte zuzugreifen, ohne die private Funktion zu einer öffentlichen zu machen. – maftyycs

Antwort

0

Ein privater Konstruktor ist ein Zeichen dafür, dass die Klasse als Singleton-Muster implementiert ist (sehr häufig in Klassen, die für den Datenbankzugriff verwendet werden).

Geben Sie für andere öffentliche Methode, wahrscheinlich so etwas wie "Instanz()", "getInstance()", "getConnection" ...

Verwandte Themen