PHP编程对我来说很新鲜 - 所以我希望我不要问一些愚蠢的事情。但是,我找不到任何问题的答案:-(
我已将数据库连接保存在单独的.php文件中。让我们说" connection.inc.php"
connection.inc.php如下所示:
$host = "name.server.com";
$dbname = "foo";
$user = "bar";
$pass = "PaSW0rd";
try
{
$DBH = new PDO("mysql:host=$host;dbname=$dbname",$user,$pass,
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
}
catch(PDOException $e)
{
...
}
在我的index.php中,我会将connection.inc.php包含在' include_once" connection.inc.php"
另外,我有一个名为house.class.php的类,其中我有一个带有SQL查询的方法到我的数据库。我通过' getColor($ id,$ DBH)'来调用该方法。来自我的index.php
有没有办法在不将$ DBH放入调用的情况下使用该方法?
感谢您的帮助!
答案 0 :(得分:0)
您应该从类本身而不是索引文件中获取$DBH
。然后你可以让数据库连接的那个实例可以在类中使用其他方法,而不必为每个函数重新连接或者必须为连接提供连接作为参数。
这样的一个例子看起来像这样:
house.class.php
<?php
class House{
private $DBH;
function __construct(){
include_once "connection.inc.php";
$this->DBH = $DBH;
}
function getColor($id){
$this->DBH // <---- use it like this instead of your $DBH old variable.
}
}
?>
答案 1 :(得分:0)
我们假设您有一个名为House
且使用getColor()
方法的班级,并且在您的index.php
中。您可以在函数/方法中使用关键字global
,但我强烈反对这一点。例如:
public function getColor(int $id)
{
global $dbh;
//and use it as $dbh
$dbh->prepare(....
}
或者你可以在构造函数中注入它。您的课程如何显示的示例
class House
{
private $dbh;
function __construct($dbh)
{
$this->dbh = $dbh;
}
public function getColor($id)
{
//$this refers to current object context
$this->dbh->prepare.....
}
}
当您实例化House对象时,您将$DBH
传递给构造函数。您index.php
的示例:
include_once "connection.inc.php";
$house = new House($DBH);
$house->getColor($id);
虽然,我建议您检查域驱动设计,工厂和存储库模式,以及Doctrine或Eloquent之类的ORM,以便更好地理解如何将应用程序/域逻辑与数据库分离。
答案 2 :(得分:0)
class Database
{
private $host = "localhost";
private $dbname = "codeignitor";
private $username = "root";
private $password = "";
public $conn;
public function getConnection()
{
$this->conn = null;
try {
$this->conn = new PDO ("mysql:host=" . $this->host . ";dbname=" . $this->dbname, $this->username, $this->password);
$this->conn->exec("set names utf8");
// echo "MySqlConnected";
} catch(PDOException $exception){
echo "Connection error: " . $exception->getMessage();
}
return $this->conn;
}
}