【发布时间】:2020-02-12 05:36:38
【问题描述】:
我有一个带有 SQLite 数据库的 php 网站。此代码打开并查询数据库没有错误:
use App\SQLiteConnection;
$pdo = (new SQLiteConnection())->connect();
$pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$stmt = $pdo->query("SELECT empid, fullname FROM employees ORDER BY fullname");
while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
$employees[] = [
'empid' => $row['empid'],
'fullname' => $row['fullname']
];
}
这里的代码:
use App\SQLiteConnection;
$pdo = (new SQLiteConnection())->connect();
$pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$training_id = $_POST['id'];
$stmt = $pdo->prepare("SELECT description from training WHERE id = :training_id");
$stmt->bindParam(':training_id', $training_id);
$stmt->execute();
echo $stmt->fetchColumn();
得到一个错误:
致命错误:未捕获的 PDOException: SQLSTATE[HY000] [14] 无法 在中打开数据库文件 C:\Bitnami\wampstack-7.3.10-0\apache2\htdocs\arborcircle\app\SQLiteConnection.php:23 堆栈跟踪:0 C:\Bitnami\wampstack-7.3.10-0\apache2\htdocs\arborcircle\app\SQLiteConnection.php(23): PDO->__construct('sqlite:db/EmpTr...') 1 C:\Bitnami\wampstack-7.3.10-0\apache2\htdocs\arborcircle\functions\get_training_description.php(10): App\SQLiteConnection->connect() 2 {main} 抛出 C:\Bitnami\wampstack-7.3.10-0\apache2\htdocs\arborcircle\app\SQLiteConnection.php 第 23 行
这是我的 SQLiteConnection 类:
class SQLiteConnection {
/**
* PDO instance
* @var type
*/
private $pdo;
/**
* return in instance of the PDO object that connects to the SQLite database
* @return \PDO
*/
public function connect() {
if ($this->pdo == null) {
$this->pdo = new \PDO("sqlite:" . Config::PATH_TO_DB_FILE);
}
return $this->pdo;
}
}
我如何查询数据库的两个示例似乎都与我相似,但我不明白为什么第二个示例会引发打开同一数据库的错误。
任何帮助表示赞赏。
【问题讨论】:
-
这可能是命名空间问题,在
SQLiteConnection中,您可以尝试放置Config::PATH_TO_DB_FILE的绝对类名,这可能是\Config::PATH_TO_DB_FILE或\App\Config::PATH_TO_DB_FILE,或者您可能有两个不同的脚本试图同时打开同一个 sqlite 数据库,这可能会发生冲突