PHP - 使用命名空间创建PDO连接
PHP - 使用命名空间创建PDO连接
我有一个名为utilities的项目文件夹。
目录列表如下:
- utilities
- tli
- database
Connection.php
index.php
Connection.php是PDOConnection。
代码如下:
namespace app\tli\database;
use PDO;
use PDOException;
Class Connection
{
private $server = "mysql:host=localhost;dbname=ytsurumaru_hanwa_coil_v.2";
private $user = "root";
private $pass = "";
private $options = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,);
protected $con;
public function openConnection()
{
try {
$this->con = new PDO($this->server, $this->user, $this->pass, $this->options);
return $this->con;
} catch (PDOException $e) {
return "连接出现问题:" . $e->getMessage();
}
}
public function closeConnection()
{
$this->con = null;
}
}
现在,我需要在index.php中使用这个Connection实例。
namespace app;
use app\tli\database\Connection;
use PDOException as PDOEx;
require('tli/database/Connection.php');
try {
$connection = new Connection(); // 找不到
$connection->openConnection();
} catch (PDOEx $e) {
echo $e->getMessage();
}
运行时,出现以下错误:
D:\wamp64\www\utilities\tli>php index.php
警告:require(tli/database/Connection.php):打开流失败:没有这个文件或目录在D:\wamp64\www\utilities\tli\index.php的第8行
致命错误:require():打开所需的文件失败'tli/database/Connection.php'(include_path='.;C:\php\pear')在D:\wamp64\www\utilities\tli\index.php的第8行
如何解决这个问题?是我的命名空间有问题吗?
问题的出现原因:
问题出现的原因是在不同的命名空间中,代码中没有正确地访问到数据库连接。
解决方法:
解决方法有两种:
1. 使用完整的命名空间路径:
在代码中使用完整的命名空间路径来创建数据库连接对象。
$connection = new \tli\database\Connection();
需要确保路径设置正确。
2. 使用别名:
可以为命名空间创建一个别名,然后使用别名来创建数据库连接对象。
namespace app; require 'tli/database/Connection.php'; use tli\database\Connection as MyConnection; $connection = new MyConnection();
以上是解决问题的方法。
问题的出现原因:根据目录结构的描述,似乎index.php文件位于utilities目录中,但根据错误信息,它实际上位于tli目录中。因此,正确的路径应该是database/Connection.php。
解决方法:需要使用以下其中之一的代码来引入文件:
include('tli/database/Connection.php')
include_once('tli/database/Connection.php')
require('tli/database/Connection.php')
require_once('tli/database/Connection.php')
如果想要更多自动化的方法,可以使用autoloader。可以参考这个SO问题及其相关链接。