2014-01-16 43 views
2

好了,所以我剛開始的一個項目和Im創建網站的會員部分,我有2個班,到目前爲止一個數據庫等在這裏管理用戶,他們是:麻煩將PDO

class dbConnect 
{ 
    protected $db_conn; 
    public $db_name = 'todo'; 
    public $db_user= 'root'; 
    public $db_pass = 'pass'; 
    public $db_host = '127.0.0.1'; 

    function connect() 
    { 
     try 
     { 
      $this->db_conn = new PDO("mysql:host=$this->db_host;dbname = $this->db_name",$this->db_user,$this->db_pass); 
      return $this->db_conn; 
     } 
     catch(PDOException $e) 
     { 
      return $e->getMessage(); 
     } 
    } 
} 

這裏是用戶類

class ManageUsers 
{ 
    public $link; 

    function __construct() 
    { 
     $db_connection = new dbConnect(); 
     $this->link = $db_connection->connect(); 
     return $this->link; 
    } 

    function registerUsers($username,$pass,$ip_adress,$time,$date) 
    { 
     $query = $this->link->prepare("INSERT INTO `users` (username, password, ip_adress, time, date_joined) VALUES (?,?,?,?,?)"); 
     $values = array($username,$pass,$ip_adress,$time,$date); 
     $query->execute($values); 
     $counts = $query->rowCount(); 
     return $counts; 
    } 
} 

$users = new ManageUsers(); 
echo $registered = $users->registerUsers('bob','marley','127.0.0.1','12:00','29-02-2012'); 

現在我遇到的問題是,它不是將數據插入我三重檢查數據庫和數據庫中的表查詢匹配,所以也許它在語法的東西。該功能沒有錯誤運行,返回以及感謝您的幫助的,而不是零1處之泰然

+0

你是從兩個分開的文件中調用兩個類,還是這兩個類在同一個文件中? –

+0

獨立但包含了管理員類中的dbconnect類 – user3051232

+0

@ Fred-ii-include_once'class.db。PHP的「; – user3051232

回答

1

嗯,有幾個明顯的問題:

  • 你的問題是你沒有配置過的PDO驅動程序正確

這是一個很好的做法,當SQL命令/查詢失敗暫停執行。爲了激活它,您可以定義相應的驅動程序選項PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION

  • dbConnect類無厘頭

首先,你要連接到服務器MySQL,因此這將是更更好地以某種方式表明它。而且由於你的dbConnect是數據庫連接的邏輯部分,所以composition不是要走的路。相反,該類應延長(因爲它滿足is-a關係)

所以,你可以寫一個類,會在MySQL-PDO特定的,可能看起來像這樣的:

class MySQL_PDO extends PDO 
{ 
    public function __construct(array $params) 
    { 
     $dsn = 'mysql:host=' . $params['host']; 

     if (isset($params['dbname'])) { 
      $dsn .= ';dbname=' . $params['dbname']; 
     } 

     $options = array(
      parent::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8', 
      parent::ATTR_ERRMODE   => parent::ERRMODE_EXCEPTION, 
      parent::ATTR_EMULATE_PREPARES => false, 
      parent::ATTR_DEFAULT_FETCH_MODE => parent::FETCH_ASSOC, 
     ); 

     parent::__construct($dsn, $params['username'], $params['password'], $options); 
    } 
} 

而且你可以像初始化

$db_options = array(
    'host' => '127.0.0.1', 
    'username' => 'root', 
    'password' => '', 
    'dbname' => 'todo' 
); 

$pdo_driver = new MySQL_PDO($db_options); 

ManageUsers實際上是DataMapper的實現,應採取適當的Dependency Injection

優勢

此外,請注意,time是MySQL中的保留字,因此您最好堅持使用反碼。

class UserMapper 
{ 
    protected $pdo; 

    public function __construct($pdo) 
    { 
     $this->pdo = $pdo; 
    } 

    public function insert($username, $password, $ip_adress, $time, $date_joined) 
    { 
     $query = "INSERT INTO `users` (`username`, `password`, `ip_adress`, `time`, `date_joined`) VALUES (:username, :password, :ip_adress, :time)" 

     $stmt = $this->pdo->prepare($query); 
     return $stmt->execute(array(
      ':username' => $username, 
      ':password' => $password, 
      ':ip_adress' => $ip_adress, 
      ':date_joined'=> $date_joined 
     )); 
    } 
} 

而且你終於,你可以使用它,就像:

$mapper = new UserMapper($pdo_driver); 
$mapper->insert('foo', .....); 
+0

感謝您的建議,我對代碼做了一些更改,它可以工作 – user3051232

1

這裏是工作的代碼

class dbConnect 
{ 
    protected $db_conn; 
    public $db_host = '127.0.0.1'; 
    public $db_user = 'root'; 
    public $db_pass = 'roadmin'; 
    public $db_name = 'todo'; 

    public function connect() 
    { 
    try 
    { 
     $this->db_conn = new PDO("mysql:host=$this->db_host;dbname=$this->db_name", $this->db_user,$this->db_pass); 
     return $this->db_conn; 
    } 
    catch(PDOException $e) 
    { 
     return $e->getMessage(); 
    } 
    } 

} 

這裏是管理用戶類

include_once('class.db.php'); 

class ManageUsers 
{ 
    public $link; 

    function __construct() 
    { 
    $db_connection = new dbConnect(); 
    $this->link = $db_connection->connect(); 
    return $this->link; 
    } 

    function registerUsers($username,$email,$password,$ip_adress,$date) 
    { 
    $query = $this->link->prepare("INSERT INTO `users` (username,email, password, ip_adress, date_joined) VALUES(?,?,?,?,?)"); 
    $values = [$username,$email,$password,$ip_adress,$date]; 
    $query->execute($values); 
    $confirm = $query->rowCount(); 
    return $confirm; 
    } 

    function loginUser 
} 

$test = new ManageUsers(); 
echo $test->registerUsers('bob','[email protected]','lol','127.0.0.1','2012');