在PHP中学习OOP,尝试重构我的代码。无法再连接到数据库

时间:2010-06-02 21:42:27

标签: php oop class pdo

我以为我理解了课程是如何工作的,然后我尝试了这段代码:

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',消息'无效   数据源名称'in   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 个答案:

答案 0 :(得分:3)

$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 :(得分:1)

不要在连接字符串中放置空格。 ("; dbname="应为";dbname=")。

此外,有几个实例需要在某些类实例变量($this->$this->con等等)前面添加$this->dbinfo

答案 2 :(得分:1)

这样做:$this->dbcon = new PDO($con, $dbinfo['user'], $dbinfo['password']);
在此:$this->dbcon = new PDO($this->con, $dbinfo['user'], $dbinfo['password']);

答案 3 :(得分:0)

这是dsn语法:http://fr2.php.net/manual/en/ref.pdo-mysql.connection.php 我没有看到任何空格,也许你应该删除分号后添加的那个......