Изучаю ООП в PHP, пытаюсь реорганизовать мой код. Больше не могу подключиться к базе данных - PullRequest
1 голос
/ 03 июня 2010

Хотя я понял, как работают классы, я попробовал этот код:

class user
  {
  var $dbcon;

  var $dbinfo;
  var $con;    
  var $error;

  function dbConnect()
    {

    $this->dbinfo['server'] = "localhost";
    $this->dbinfo['database'] = "foolish_faith";
    $this->dbinfo['user'] = "user";
    $this->dbinfo['password'] = "password";

    $this->con = "mysql:host=".$dbinfo['server']."; dbname=".$dbinfo['database'];
    $this->dbcon = new PDO($con, $dbinfo['user'], $dbinfo['password']);
    $this->dbcon->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $this->error = $this->dbcon->errorInfo();

    if ($error[0] != "")
      {
      print "Error!";
      print_r($error);
      }
    }
  }

Теперь он просто выплевывает эту ошибку:

Неустранимая ошибка: необработанное исключение 'PDOException'с сообщением «недопустимое имя источника данных» в E: \ PortableApps \ xampp \ htdocs \ dbcon.php: 24 Трассировка стека: # 0 E: \ PortableApps \ xampp \ htdocs \ dbcon.php (24): PDO -> __ construct ('', NULL, NULL) # 1 E: \ PortableApps \ xampp \ htdocs \ login.php (4): user-> dbConnect () # 2 {main}, брошенный в E: \ PortableApps \ xampp \ htdocs \ dbcon.php настрока 24

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

Ответы [ 4 ]

3 голосов
/ 03 июня 2010
$this->con = "mysql:host=".$dbinfo['server']."; dbname=".$dbinfo['database'];
$this->dbcon = new PDO($con, $dbinfo['user'], $dbinfo['password']);

Когда вы получаете доступ к переменным экземпляра класса, вы должны использовать оператор ->. В этом случае вы бы использовали $this->dbinfo вместо $dbinfo и $this->con вместо $con. Вы сделали это правильно на левой стороне, но пропустили некоторые справа.

1 голос
/ 03 июня 2010

Сделать так: $this->dbcon = new PDO($con, $dbinfo['user'], $dbinfo['password']);
В этом: $this->dbcon = new PDO($this->con, $dbinfo['user'], $dbinfo['password']);

1 голос
/ 03 июня 2010

Не ставьте пробелы в строке подключения. ("; dbname=" должно быть ";dbname=").

Кроме того, есть пара случаев, когда вам необходимо добавить $this-> перед некоторыми переменными экземпляра класса ($this->con, $this->dbinfo и так далее).

0 голосов
/ 03 июня 2010

Вот синтаксис dsn: http://fr2.php.net/manual/en/ref.pdo-mysql.connection.php Я не вижу в нем пробелов, возможно, вам следует удалить тот, который вы добавили после точки с запятой ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...