PHP - 使用命名空间创建PDO连接

17 浏览
0 Comments

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行

如何解决这个问题?是我的命名空间有问题吗?

0
0 Comments

问题的出现原因:

问题出现的原因是在不同的命名空间中,代码中没有正确地访问到数据库连接。

解决方法:

解决方法有两种:

1. 使用完整的命名空间路径:

在代码中使用完整的命名空间路径来创建数据库连接对象。

$connection = new \tli\database\Connection();

需要确保路径设置正确。

2. 使用别名:

可以为命名空间创建一个别名,然后使用别名来创建数据库连接对象。

namespace app;
require 'tli/database/Connection.php';
use tli\database\Connection as MyConnection;
$connection = new MyConnection();

以上是解决问题的方法。

0
0 Comments

问题的出现原因:根据目录结构的描述,似乎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问题及其相关链接。

0