2013-11-23 2 views
0

Код, который я опубликую, работает, но я хочу знать, все ли в порядке и безопасно. Я буду использовать его для подключения моего Android-приложения с моей базой данных MySQL.PDO Connection Функции 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?

- Я думаю, здесь должно быть закрыто соединение, потому что запрос уже завершен. Это правда?

Я бы сделал хороший веб-сервис, потому что это последний проект моего курса, а позже это будет личный проект с интеграцией iOS.

спасибо.

+2

Переместить учетные данные базы данных в отдельный файл конфигурации. Дополнительные баллы, если вы включите его через конфигурацию http-сервера вместо использования оператора include. Таким образом, вы не пропустите свои учетные данные в случае ошибки конфигурации/нарушения функции http-сервера. – arkascha

+0

спасибо за ваш комментарий – Filowk

+0

Не могли бы вы отредактировать свой вопрос, чтобы код немного сжался? –

ответ

0

Я понятия не имею о других файлах, которые вы включили (их слишком сложно прочитать), но для ответа на вопрос из названия: PDO is уже класс. Тебе больше не нужно.

Так, 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); 

все, что вам нужно.

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