gpt4 book ai didi

php - 如何将 PDO::FETCH_CLASS 与命名空间一起使用?

转载 作者:行者123 更新时间:2023-12-04 16:58:22 24 4
gpt4 key购买 nike

关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。












想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。

去年关闭。




Improve this question




我正在学习 PHP,现在我正在展示一些带有 PDO 的文章。我在使用 PDO::FETCH_CLASS 和命名空间时遇到了一些问题。

我的文件夹架构:

class/
- Post.php
layout/
-articles/
--articles.php
public/
-index.php (contains my router)

后.php
namespace App\Articles;

class Post {
private $id;
private $name;
private $content;
private $date;

public function getId()
{
return $this->id;
}
public function getName()
{
return $this->name;
}
public function getContent()
{
return $this->content;
}
public function getExcerpt()
{
$res = $this->content;
return (strlen($res) > 150) ? substr($res, 0, 150) . '...' : $res;
}
public function getDate()
{
return $this->date = date('d-m-Y', $this->date);
}
}

data.db 只包含四列:id、name(text)、content(text)、created_at(int)

我有问题的部分:
use App\Articles\Post;

$pdo = new PDO('sqlite:../data.db', null, null, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ
]);
try {
$query = $pdo->query('SELECT * FROM posts');
$posts = $query->fetchAll(PDO::FETCH_CLASS, 'Post');
} catch (PDOException $e) {
$error = $e->getMessage();
}

我尝试了不同的打字方式而不是 'Post喜欢
'App\Articles\'
'App\Articles\Post'
'App\Articles\::POST'
...

我无法使其与 namepsace 一起使用。
它适用于 require '../class/Post.php' .

这个问题有解决方案还是我应该只使用 require ?

最佳答案

PDO 不查找别名类名或解析当前命名空间。所以你必须明确地传递它:

$query = $pdo->prepare('SELECT * FROM posts');
$query->execute();
$posts = $query->fetchAll(PDO::FETCH_CLASS, __NAMESPACE__ . '\\post');

使用query代替prepare会导致pdo错误,我改为prepare。

如果 NAMESPACE 与类分开,则不能使用它,但可以使用完整路径 'app\controller\post' .

看到这个答案和问题 https://stackoverflow.com/a/20176944/12232340

关于php - 如何将 PDO::FETCH_CLASS 与命名空间一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60248080/

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