我想将查询结果提取到一个类中(到一个类的实例数组中)。但是我收到以下错误消息: 致命错误:在......中找不到“类别”类 这是我的数据库管理器类中涉及的两个函数的代码:
public function prepareStatement($_Statement)
{
$this->preparedStmt = $this->pdo->prepare($_Statement);
if($this->preparedStmt === FALSE)
throw new PreparedStmtException ("Fehler: Statement konnte nicht prepared werden.");
else
return TRUE;
}
public function execute($_Params = array(), $_FetchMode = NULL, $_Class = NULL)
{
# Cancel execution if no statement prepared
if($this->preparedStmt === null)
throw new PreparedStmtException ("Fehler: Statement wurde vor execute nicht prepared.");
try
{
# Execute PDO call with params
$this->preparedStmt->execute($_Params);
# If no data is returned throw NoDataException
if($this->preparedStmt->columnCount() == 0)
throw new NoDataException;
// else
// Determine which fetch mode should be called, if NULL or something != 1 || != 0 just call
// fetchAll without params
if ($_FetchMode == 1)
$result = $this->preparedStmt->fetchAll(PDO::FETCH_ASSOC);
else if ($_FetchMode == 2)
$result = $this->preparedStmt->fetchAll(PDO::FETCH_CLASS, $_Class);
else
$result = $this->preparedStmt->fetchAll();
}
catch (PDOException $e)
{
# Errormanagement --> Message im live Betrieb rausnehmen
echo '<div style="color: red;">'.$e->getMessage().'</div>';
$result = FALSE;
}
// If result is null throw Instance Exception, if result emtpy throw NoDataException
if ($result == null)
throw new InstanceException;
else if (empty($result))
throw new NoDataException;
return $result;
}
这是一个类中的测试函数来调用它们:
public function test ()
{
$stmt = "SELECT * FROM tx_exhibition_category WHERE uid = 1 OR uid = 2";
$this->mysql->prepareStatement($stmt);
return $this->mysql->execute (array(), 2, "Category");
}
这就是我称之为测试功能的方式:
$comment = CommentQuery::getInstance();
$result = $comment->test();
var_dump($result); // should be an array with instances of Category
这是应该被引入的类:
class Category {
private $id;
private $name;
private $projectId;
// getter and setter...
}
其他一些信息:
有什么想法吗?
答案 0 :(得分:6)
如果您的Category
类位于命名空间中,则需要将完全限定的类名传递到fetchAll
。
现在,PDO正在尝试获取根命名空间中的类Category
。它不存在。您需要告诉PDO命名空间:
$stm->fetchAll(\PDO::FETCH_CLASS, 'Vendor\\Package\\Category');
或者使用__NAMESPACE__
常量,如果这更容易(并且是正确的):
$stm->fetchAll(\PDO::FETCH_CLASS, __NAMESPACE__ . '\\Category');
或者更好的是,使用PHP 5.5 +的::class
常量来表示完全限定的类名。
use Acme\Package\Category;
$stm->fetchAll(\PDO::FETCH_CLASS, Category::class);