我是OOP的新手,所以我想学习如何创建类并使用它们。目前我正在尝试从我的mysql表中获取数据。
要创建与mysql的连接我正在使用PDO。我已经为数据库连接创建了一个单独的类。我已将该类包含在show.php文件中。现在我想从mysql数据库中获取数据。问题是,当我运行我的show.php文件时,它显示此错误消息Fatal error: Call to undefined method DBConnection::prepare() in C:\xampp\htdocs\jm\show.php on line 10
,但它应该只显示array
。
你能帮我找到解决这个问题的方法吗?
db.class.php
<?php
class DBConnection {
function DBConnection(){
$host='localhost';
$dbname='srijon';
$user='root';
$pass='';
try {
$DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
return $DBH;
}
catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
}//function ends
}// class ends
?>
show.php
<?php
require_once 'db.class.php';
function get_all(){
$db=new DBConnection();
$sql="SELECT * FROM information";
$STH = $db->prepare($sql);
$STH->execute();
$STH->setFetchMode(PDO::FETCH_ASSOC);
return $STH;
}
echo get_all();
?>
答案 0 :(得分:11)
恕我直言,你可以将PDO连接注入需要它的函数:
<?php
$dbHandle = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
$dbHandle->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// always disable emulated prepared statement when using the MySQL driver
$dbHandle->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
function get_all($dbHandle) {
$sql = "SELECT * FROM information";
$stmt = $dbHandle->prepare($sql);
$stmt->execute();
$stmt->setFetchMode(PDO::FETCH_ASSOC);
return $stmt;
}
get_all($dbHandle);
如果你真的认为你需要一些类访问数据库(PDO除外)(你不需要),你必须扩展PDO:
<?php
class DBConnection extends PDO
{
public function __construct()
{
parent::__construct("mysql:host=$host;dbname=$dbname", $user, $pass);
$this->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// always disable emulated prepared statement when using the MySQL driver
$this->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}
}
$dbHandle = new DBConnection();
function get_all($dbHandle) {
$sql = "SELECT * FROM information";
$stmt = $dbHandle->prepare($sql);
$stmt->execute();
$stmt->setFetchMode(PDO::FETCH_ASSOC);
return $stmt;
}
get_all($dbHandle);
答案 1 :(得分:1)
可能将DBConnections FUNCTION更改为__contstruct()函数。此外,您需要扩展PDO类以使用其中的所有方法。