Вы использовали include_once "db_config.php";
вместо include "db_config.php";
.
Как я понял из вашего кода, каждый раз, когда вы включаете db_config.php
, вы будете создавать объект базы данных $DBH
.
* 1008.* Поскольку вы указали его как
include_once
, он будет запускаться только db_config.php один раз, а в классе журнала, когда вы попытаетесь его включить, он не запустится, поскольку он уже включен в метод Add.
Чтобы улучшить это, вы должны создать класс, который исключительно управляет (или инкапсулирует) объект PDO.Вы можете просто создать класс Singleton, который возвращает объект PDO, включить класс один раз в начало и извлечь объект, где бы вы ни находились в коде.
Пример:
DBAccess.php
class DBAccess extends Singleton{
// there is a getInstance() method in the Singleton abstract class
private $dbh;
// The PDO object is created only once when the first getInstance() is called in Singleton.
function __construct(){
try
{
$this->dbh = new PDO("mysql:host=$db_host;dbname=$db_name", $db_user, $db_pass);
$this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
}
catch (PDOException $e)
{
echo $e->getMessage();
}
}
/**
* Get the PDO object
* @return object
*/
public static function getDBH(){
return self::getInstance()->dbh;
}
}
Класс журнала:
class Log
{
public static function Add($action)
{
try
{
$DBH = DBAccess::getDBH();
$ip = $_SERVER['REMOTE_ADDR'];
$time = date('Y-m-d');
$values = array($ip, $action, $time);
$STH = $DBH->prepare("INSERT INTO log (ip, action, time)
VALUES (?, ?, ?)");
$STH->execute($values);
}
catch (PDOException $e)
{
echo $e->getMessage();
}
}
}
Использование:
include_once ('db_config.php');include_once ('mLog.php');
public static function Add($catName, $catDescr = '', $catImgURL = '', $catSubLevel = 0, $catSubID = 0)
{
try
{
$DBH = DBAccess::getDBH();
$values = array($catName, $catDescr, $catImgURL, $catSubLevel, $catSubID);
$STH = $DBH->prepare("INSERT INTO cat (catName, catDescr, catImg, catSubLevel, catSubID)
VALUES (?, ?, ?, ?, ?)");
$STH->execute($values);
$DBH = null;
Log::Add("Added category 111" . $catName);
return true;
}
catch (PDOException $e)
{
echo $e->getMessage();
}
}