无法从 js axios.get 请求打开 sqlite 数据库文件
Unable to open sqlite DB file from js axios.get request
无法从 js axios.get 请求打开 sqlite DB 文件:(console.log outputs exception message)。该请求可能会调用我的 PHP 控制器以从数据库中获取 select 数据,并且 return 它已 json 编码。
另一方面,PHP contoller 使它的工作很好:screenshot
通过这种方式,我尝试从 Vue 表单发送一个 axios 请求:screenshot
或代码:
Vue.createApp({
data: () => ({
processors:'',
memory:'',
drives:'',
motherboards:'',
cases:'',
}),
methods:{
fetchProcessors:function (){
axios.get('/src/controllers/getProcessors.php').then(
(response) => {
this.processors = response.data;
console.log(response);
});
}
},
created:function (){
console.log('vue is ok');
this.fetchProcessors();
}
}).mount(".js-form");
PHP控制器代码:
<?php
require_once __DIR__ . '/../../vendor/autoload.php';
use Doctrine\DBAL;
$connectionParams = [
'url' => 'sqlite3:///db/calc_db.sqlite3'
];
try {
$conn = DBAL\DriverManager::getConnection($connectionParams);
$data = $conn->fetchAllAssociative('SELECT name, cost FROM processors');
echo json_encode($data, JSON_THROW_ON_ERROR);
} catch (Exception $e) {
echo $e->getMessage();
}
我试过:
- 给整个项目 chmod 777
- 使用 phpstorm 工具发出请求(returns 相同的异常消息)
- 从控制器发送 const json - 它很好,证明 js 请求和 php 控制器一起正常工作,问题出在与数据库文件的连接上(我认为是)
- 使用sqlite驱动代替sqlite3
full stack trace
问题出在 'path' 参数中:我已经从项目根目录(工作目录)启动了我的脚本,因此正确构建了我的数据库的相对路径。
在 web-server WD 是一条路径,我在请求中给出(控制器目录),因此我的数据库的相对路径构建不正确。
我已经像这样替换了路径参数,一切正常:
$connectionParams = [
'path' => dirname(__DIR__, 2) . '/db/calc_db.sqlite3',
'driver' => 'pdo_sqlite'
];
无法从 js axios.get 请求打开 sqlite DB 文件:(console.log outputs exception message)。该请求可能会调用我的 PHP 控制器以从数据库中获取 select 数据,并且 return 它已 json 编码。
另一方面,PHP contoller 使它的工作很好:screenshot
通过这种方式,我尝试从 Vue 表单发送一个 axios 请求:screenshot 或代码:
Vue.createApp({
data: () => ({
processors:'',
memory:'',
drives:'',
motherboards:'',
cases:'',
}),
methods:{
fetchProcessors:function (){
axios.get('/src/controllers/getProcessors.php').then(
(response) => {
this.processors = response.data;
console.log(response);
});
}
},
created:function (){
console.log('vue is ok');
this.fetchProcessors();
}
}).mount(".js-form");
PHP控制器代码:
<?php
require_once __DIR__ . '/../../vendor/autoload.php';
use Doctrine\DBAL;
$connectionParams = [
'url' => 'sqlite3:///db/calc_db.sqlite3'
];
try {
$conn = DBAL\DriverManager::getConnection($connectionParams);
$data = $conn->fetchAllAssociative('SELECT name, cost FROM processors');
echo json_encode($data, JSON_THROW_ON_ERROR);
} catch (Exception $e) {
echo $e->getMessage();
}
我试过:
- 给整个项目 chmod 777
- 使用 phpstorm 工具发出请求(returns 相同的异常消息)
- 从控制器发送 const json - 它很好,证明 js 请求和 php 控制器一起正常工作,问题出在与数据库文件的连接上(我认为是)
- 使用sqlite驱动代替sqlite3
full stack trace
问题出在 'path' 参数中:我已经从项目根目录(工作目录)启动了我的脚本,因此正确构建了我的数据库的相对路径。
在 web-server WD 是一条路径,我在请求中给出(控制器目录),因此我的数据库的相对路径构建不正确。
我已经像这样替换了路径参数,一切正常:
$connectionParams = [
'path' => dirname(__DIR__, 2) . '/db/calc_db.sqlite3',
'driver' => 'pdo_sqlite'
];