通过php类建立数据库连接

时间:2013-12-31 07:30:28

标签: php

我目前正在学习和使用php课程。我已经创建了一个基本类,希望与mysql数据库连接并从两个表中获取结果。我正在使用PDO风格。在名为db_con.php

的单独文件中

我有自己的凭据来连接我的数据库。我在成功建立和获取值方面遇到了困难。我无法使用$db_con类中的db文件中的SelectList来建立连接。

我特别在这一行收到错误:

$sql = $this->db_con->prepare("SELECT * FROM curriculum_selection_list");

错误说明:

  

致命错误:在/data/24/2/26/14/2678177/user/2940861/htdocs/controlpanel/select.class.php中调用非对象上的成员函数prepare()

我该如何解决这个问题?

select.class.php

include "db_con.php";

class SelectList
{
    private $db_con;

        public function __construct()
        {
            $this->db_con = $db_con;
        }

        public function ShowCurriculum()
        {
            $sql = $this->db_con->prepare("SELECT * FROM curriculum_selection_list");
            $sql->execute();
            $data = $sql->fetchAll();
            $curriculum = '<option value="0">choose...</option>';
            foreach ($data as $row){
                 $curriculum .= '<option value="' . $row['curriculum_id'] . ':' . $row['curriculum_name'] . '">' . $row['curriculum_name'] . '</option>';
            }
            return $curriculum;

        }

        public function ShowCourse()
        {
            $sql = $this->db_con->prepare("SELECT * FROM course_selection_list");
            $sql->execute();
            $data = $sql->fetchAll();
            $course = '<option value="0">choose...</option>';
            foreach ($data as $row){
                 $course .= '<option value="' . $row['course_id'] . ':' . $row['course_name'] . '">' . $row['course_name'] . '</option>';
            }
            return $course;
        }
}

$opt = new SelectList();

db_con.php

$dsn = '';
$user = '';
$password = '';

try {
    $db_con = new PDO($dsn, $user, $password);
    $db_con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
} 

2 个答案:

答案 0 :(得分:0)

您需要一个全局声明来访问在函数外部分配的变量:

public function __construct()
{
    global $db_con;
    $this->db_con = $db_con;
}

但最好在创建对象时将连接作为参数传递,或者在db_con.php中定义一个函数并从构造函数中调用它。

答案 1 :(得分:0)

如上所述,您将错误输入以下行:
        $ sql = $ this-&gt; db_con-&gt; prepare(“SELECT * FROM curriculum_selection_list”);

        在上面的代码中,它无法与db.php建立连接      请尝试
        class SelectList
        {
           全球 $ db_con;
           ....
           ....
           .....
         }