2016-01-09 2 views
2

У меня есть собственный класс PHP, который я создаю с нуля, он предназначен для подключения, запуска подготовленного запроса, вывода и отключения от базы данных.Проблемы с моим классом PHP

Проблема в том, что мне пришлось бороться с несколькими ошибками.

Это последнее, после того как остальные были исправлены.

Warning: PDO::__construct(): MySQL server has gone away in E:\UniServerZ\www\simple db\index.php on line 23 Warning: PDO::__construct(): Error while reading greeting packet. PID=8404 in E:\UniServerZ\www\simple db\index.php on line 23 Warning: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2006] MySQL server has gone away' in E:\UniServerZ\www\simple db\index.php:23 Stack trace: #0 E:\UniServerZ\www\simple db\index.php(23): PDO->__construct('mysql:host=loca...', 'root', 'password') #1 E:\UniServerZ\www\simple db\index.php(53): simpleDB->connectToDB() #2 {main} thrown in E:\UniServerZ\www\simple db\index.php on line 23 Fatal error: Maximum execution time of 30 seconds exceeded in E:\UniServerZ\www\simple db\index.php on line 23

я не могу понять это, хотя, мои регистрационные данные, реквизиты хоста, и т.д., и т.д., все правильно, поэтому я не уверен, что теперь делать, я прочитал несколько статей в Интернете, но они не очень помогают , И вот я здесь.

Вот мой класс и подключение код:

<?php 
ini_set("display_errors", 1); 
error_reporting(E_ALL); 

class fooBarBaz { 
    protected $conn; 
    private $host; 
    private $username; 
    private $password; 
    private $db; 
    private $driver; 

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

    public function connecterino() { 
     try { 
      $this->conn = new PDO($this->driver . ':host=' . $this->host .';dbname=' . $this->db . ';charset=utf8', $this->username, $this->password); 
     } catch(PDOException $e) { 
      echo 'ERROR: ' . $e->getMessage(); 
     } 
    } 

    public function queryForStuff($preparedQuery, $params) { 
     try { 
      $stmt = $this->conn->prepare($preparedQuery); 
      $exec = $stmt->execute($params); 
      return $stmt; 
     } catch(PDOException $e) { 
      echo 'Error: ' . $e->getMessage(); 
     } 
    } 

    public function getResultOfThatStuff($sql) { 
     $data = $sql->fetchAll(PDO::FETCH_ASSOC); 
     foreach($data as $row){ 
      print_r($row); 
     } 
    } 

    public function disconnectDB() { 
     $this->conn = null; 
    } 
} 

try { 
    $db = new fooBarBaz("mysql", "localhost:8000", "myDatabase", "root", "root"); 
    $db->connecterino(); 
    $query = $db->queryForStuff("select id from songs where id != :1", [":1" => "2"]); 
    $db->getResultOfThatStuff($query); 
} catch(PDOException $e) { 
    echo 'Error: ' . $e->getMessage(); 
} 
?> 

Как я могу получить этот код работает в полной мере, как ожидалось?

Что я сделал неправильно/я слепой?

Спасибо.

+0

Общие вопросы, которые вы должны добавить к вопросу следующего вида: a) Операционная система, похоже, является версией Windows .... и 32/64bit? b) Можете ли вы подключиться с другим интерфейсом к этому серверу MySQL (например, [HeidiSQL] (http://www.heidisql.com/download.php) или [средство командной строки] (http://dev.mysql.com /doc/refman/5.7/en/mysql.html))? c) Какие версии MySQL/PHP вы используете? d) Можете ли вы подключиться к серверу MySQL при использовании простого кода, например ' '? – VolkerK

+1

Конкретно на ваш вопрос: 'localhost: 8000' <- sure? Неужели, правда, верно? ;-) – VolkerK

+0

@VolkerK ничего себе, пожалуйста, не ненавидите меня, это 4am afterall xD! Теперь он возвращает данные. – SkullDev

ответ

4

Если вы хотите подключиться к порту, кроме порта по умолчанию ваш DSN должен выглядеть

mysql:host=localhost;port=8000;dbname=test;charset=utf8 

вместо

MySQL: хост = локальный: 8000dbname = тест, кодировка = utf8

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