我有一个使用PSR-4的小项目。目前,我正在尝试从数据库中访问数据,但是运气不佳。
在我的根目录中,我具有以下目录结构
/ app / projectName / controller / app / projectName / model
在我的模型目录中,我有这个数据库文件。
<?php
namespace projectName\model;
use \PDO;
use \PDOException;
class Database
{
public static function connect(){
/* DB Connection*/
//Yes that is the correct port
$dsn = 'mysql:dbname=testData;port=25060;localhost';
$user = 'root';
$password = 'testAccount';
try {
$dbc = new PDO($dsn, $user, $password);
return $dbc;
} catch (PDOException $e) {
return 'Connection failed: ' . $e->getMessage();
}
}
}
在models目录中也有以下文件。 这是我试图从中访问数据库的文件。
<?php
namespace projectName\model;
use projectName\model\Database;
use \PDO;
use \PDOException;
class TestDataModel
{
private $dbc;
public function __construct()
{
$connect = new Database;
$this->dbc = $connect::connect();
}
public function getData(){
$this->dbc->prepare("SELECT * FROM testData.users");
$this->dbc->execute();
$fetched=$this->dbc->fetchAll();
return $fetched;
}
}
自动加载正在运行,如果我在index.php文件中的命名空间之外使用此代码,则可以访问数据库。当我开始使用PSR-4时,问题就开始了,不确定如何正确完成此工作。
答案 0 :(得分:-1)
我将查询包裹在try / catch中,发现我遇到了身份验证错误。
我发现的错误是由于mysql使用caching_sha2_password而不是mysql_native_password引起的。
运行以下查询后,我能够连接和访问数据。
ALTER USER myuser IDENTIFIED WITH mysql_native_password BY 'mypassword';