2013-11-23 62 views
0

我將發佈的代碼作品,但我想知道它是否可以並且安全。我將使用它將我的Android APP與我的MySQL數據庫連接起來。PDO連接MySQL函數

這裏我創建了PDO連接。 我不知道我是應該在構建中創建它還是使用方法。現在我使用connect()方法和get()來返回同一個對象。 我應該關閉連接嗎?爲什麼?

db_config.php

private $db; 

    function __construct(){ 

    } 

    function __destruct(){ 

    } 

    public function connect(){ 

     $host = "XXXXXXXX"; 
     $dbname = "XXXXXXXX"; 
     $username = "XXXXXXX"; 
     $password = "XXXXXXXX"; 

     $options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'); 

     try{ 

      $this -> db = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username, $password, $options); 

     } catch (PDOException $ex) { 
      die("Failed to connect to the database: " . $ex->getMessage()); 
     } 

     $this-> db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $this -> db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); 

     return $this->db; 
    } 

    public function get(){ 
     return $this -> db; 
    } 

trainer_functions.php

在這段代碼中有我,我會用它來與數據庫交互的功能。我在構造中初始化連接,然後使用get()方法在每次需要時返回相同的連接。這個可以嗎?

private $db; 

     function __construct(){ 

     require_once 'db_config.php'; 
     $this->db = new DB_Connect(); 
     $this->db->connect(); 

    } 

    public function storeUser($json){ 

     $obj = json_decode($json); 
     $email = $obj -> {"email"}; 
     $pass = $obj -> {"password"  

     $query = "INSERT INTO USUARIOS (email, pass) VALUES (:email , :pass)"; 

     $query_params = array(

      ':email' => $email, 
      ':pass' => $pass 

     );  
     try { 
      $stmt = $this -> db -> **get()** -> prepare($query); 
      $result = $stmt -> execute($query_params);  
      //json response  
     } 
     catch (PDOException $ex) {    
      //json response 
     } 

我的測試代碼的最後一部分是使用標籤調用函數。我創建了一個trainer_functions對象,然後通過POST收集參數並使用該對象調用函數。這裏我有兩個問題:

- 我發送一個JSON。我應該在JSON內部還是外部發送標籤?

- 我想這裏應該關閉連接,因爲請求已經完成。這是真的?

我會做一個很好的web服務,因爲它是我的課程的最後一個項目,後來它將成爲一個iOS集成的個人項目。

非常感謝。

+2

將數據庫憑證移至單獨的配置文件。如果您通過http服務器配置包含它而不是使用包含語句,則需要加分。這樣,你就不會泄漏你的憑證,以防http服務器的配置/失效。 – arkascha

+0

感謝您的評論 – Filowk

+0

請您編輯您的問題,使代碼有點凝結? –

回答

0

我不知道你所包含的其他文件(它們太難讀)但回答標題的問題:PDO是已經是一類。你不需要更多。

所以,db_config.php

<?php 
$host  = "XXXXXXXX"; 
$dbname = "XXXXXXXX"; 
$username = "XXXXXXX"; 
$password = "XXXXXXXX"; 
$charset = 'utf8'; 

$options = array(
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES $charset', 
    PDO::ATTR_ERRMODE   => PDO::ERRMODE_EXCEPTION, 
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 
); 
$dsn = "mysql:host=$host;dbname=$dbname;charset=$charset" 
$db = new PDO($dsn, $username, $password, $options); 

是你所需要的。