我目前正在学习和使用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();
}
答案 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;
....
....
.....
}