2015-12-24 2 views
0

я создал следующий код для моего DB-Connection, однако я не могу создать подключение к моей базе данных из другого .php файла (в другом каталоге):Невозможно создать объект из класса PDO-Database

Моей базе данных. PHP файл:

<?php 

    ini_set('display_errors', 'On'); 

    public class Database { 

     public function __construct() { 
      $this->dsn = 'mysql:host=xxx;dbname=xxx'; 
      $this->username = 'xxx'; 
      $this->password = 'xxx'; 
     } 

     public function __construct($dsn, $username, $password) { 
      $this->dsn = $dsn; 
      $this->username = $username; 
      $this->password = $password; 
     } 

     public function db_connect() { 
      try { 
       $database = new PDO($this->dsn , $this->username, $this->password); 
       return $database; 
      } catch(PDOException $e) { 
       echo $e->getMessage(); 
      } 
     } 

     public function run_query($database, $query){    
      try { 
       $result = $database->prepare($query); 
       $result->execute(); 
       return $result; 
      } catch (Exception $e) { 
       echo $e->getMessage(); 
       die(); 
      } 
     } 

    } 

?> 

каталог этого файла CurrentDirectory /php/database.php.

Я пытаюсь создать экземпляр подключения базы данных в другом файле (названный page.php) со следующим кодом:

include("php/database.php") 
$database = new Database(); 
$connection = $database->db_connect(); 
$result = $database->run_query($connection, $query); 

Каталог этого файла CurrentDirectory /page.php.

Я искал ошибку уже сейчас и не вижу, что я сделал не так. Другие вопросы, касающиеся классов PDO-DB, тоже не помогли мне. Заранее благодарю за любую помощь!

+1

Какую ошибку вы получаете? –

+0

Технически не создавать несколько конструкторов. –

+0

Это вообще не выполнялось – MoneyIsAMotivation

ответ

3

public, private, protected используются для методов класса и/или свойств не для самих классов.
У вас не должно быть двух конструкторов или двух функций с тем же именем, вы получите фатальную ошибку, «не можете повторно использовать».

См. Пример ниже.
Он использует частные свойства для компонентов dsn, самого объекта pdo и оператора pdo.
Вы можете вернуть их в самих методах, чтобы их можно было связать.

<?php 

class Database { 

    private $host; 
    private $username; 
    private $password; 
    private $database; 

    private $pdo; 
    private $stmt; 


    public function __construct($host,$user,$pass,$db) { 
     $this->host = $host; 
     $this->username = $user; 
     $this->password = $pass; 
     $this->database = $db; 

     $dsn = 'mysql:dbname=' . $this->database .';host=' . $this->host; 

     try { 

      $this->pdo = new PDO($dsn, $this->username, $this->password); 

     } catch (PDOException $e) { 
      echo 'Connection failed: ' . $e->getMessage(); 
     } 

    } 

    public function query($query){ 
     $this->stmt = $this->pdo->prepare($query); 
     return $this; 
    } 

    public function getResults(){ 
     $this->stmt->execute(); 
     return $this->stmt->fetchAll(PDO::FETCH_ASSOC); 
    } 

} 

Использование

// include the file 

$db = new Database('localhost','root','','db_name'); 

print_r($db->query('select * from my_table limit 10')->getResults()); 
+0

Спасибо! Ценить это! – MoneyIsAMotivation

+0

Вы больше всего любите @ MoneyIsAMotivation –

+0

Lovin '* хорошо объясненный * ;-) –

1

Вам нужно сделать некоторые изменения в файле database.php, так что ваш код файла должен быть:

<?php 

    ini_set('display_errors', 'On'); 

    class Database{ 

     public function __construct(){ 
      $this->dsn = 'mysql:host=xxx;dbname=xxx'; 
      $this->username = 'xxx'; 
      $this->password = 'xxx'; 
     } 

     public function db_connect() { 
      try { 
       $database = new PDO($this->dsn , $this->username, $this->password); 
       return $database; 
      } catch(PDOException $e) { 
       echo $e->getMessage(); 
      } 
     } 

     public function run_query($database, $query){    
      try { 
       $result = $database->prepare($query); 
       $result->execute(); 
       return $result; 
      } catch (Exception $e) { 
       echo $e->getMessage(); 
       die(); 
      } 
     } 

    } 

?> 

И вы page.php код файла должен быть:

include("php/database.php") 
$database = new Database(); 
$connection = $database->db_connect(); 
$query = "SELECT * FROM table"; 
$result = $database->run_query($connection, $query); 

public объем только для переменной/функция. Это не для Class.

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