gpt4 book ai didi

PHP - 将准备好的 stmt 提取到类 : Fatal Error "class not found"

转载 作者:行者123 更新时间:2023-11-29 01:16:53 25 4
gpt4 key购买 nike

我想将查询结果提取到一个类中(放入一个类的实例数组中)。但我收到以下错误消息: fatal error :在...中找不到类“类别”这是我的数据库管理器类中涉及的两个函数的代码:

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...
}

一些附加信息:

  • 我使用自动加载器来包含我的类(class)。
  • 我使用命名空间
  • 是的,可以在所有三个函数中创建类的实例,所以
    将包含类并使用命名空间
  • $_Mode == 1 工作正常

有什么想法吗?

最佳答案

如果您的 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);

关于PHP - 将准备好的 stmt 提取到类 : Fatal Error "class not found",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20176878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com