【发布时间】:2011-06-22 02:24:27
【问题描述】:
所以场景很简单。我使用在数据库中执行某些操作的类,但在该类中我调用了另一个也在 DB 中执行某些操作的类。
谢谢,include_once 更改为包含,它可以工作!
这是我得到的:
致命错误:调用成员函数 prepare() 在非对象上 -> mLog.php 在第 20 行
我使用 db_config.php 创建 PDO 对象,然后将其包含在我的类中。
db_config.php
try
{
$DBH = new PDO("mysql:host=$db_host;dbname=$db_name", $db_user, $db_pass);
$DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
}
catch (PDOException $e)
{
echo $e->getMessage();
}
一级 mLog.php
<?php
class Log
{
public static function Add($action)
{
try
{
include_once "db_config.php";
$ip = $_SERVER['REMOTE_ADDR'];
$time = date('Y-m-d');
$values = array($ip, $action, $time);
//ERROR NEXT LINE
$STH = $DBH->prepare("INSERT INTO log (ip, action, time)
VALUES (?, ?, ?)");
$STH->execute($values);
$DBH = null;
$STH = null;
}
catch (PDOException $e)
{
echo $e->getMessage();
}
}
}
第二类使用第一类(片段,因为它很大并且有很多功能)
public static function Add($catName, $catDescr = "", $catImgURL = "", $catSubLevel = 0, $catSubID = 0)
{
try
{
include_once "db_config.php";
include_once "mLog.php";
$values = array($catName, $catDescr, $catImgURL, $catSubLevel, $catSubID);
$STH = $DBH->prepare("INSERT INTO cat (catName, catDescr, catImg, catSubLevel, catSubID)
VALUES (?, ?, ?, ?, ?)");
$STH->execute($values);
$DBH = null;
$STH = null;
//HERE IT IS
Log::Add("Added category 111" . $catName);
return true;
}
catch (PDOException $e)
{
echo $e->getMessage();
}
}
【问题讨论】:
-
错误还应该有一个文件和行号。这对应什么?在 Log 类或第二类中的 prepare() 调用?