[英]CakePHP SQLSTATE[HY000][14] error
I'm trying to upgrade my current CakePHP 2.x application to 3.x. 我正在尝试将当前的CakePHP 2.x应用程序升级到3.x.
I fixed namespace and folder structure issues. 我修复了命名空间和文件夹结构问题 Now I have problems with database.
现在我有数据库问题。 In my test server, I created same MySQL database and grant access to users.
在我的测试服务器中,我创建了相同的MySQL数据库并授予用户访问权限。 Then I changed
config\\app.php
configuration file. 然后我更改了
config\\app.php
配置文件。 But when I try my application I get following error. 但是当我尝试我的应用程序时,我得到以下错误。 What would be the problem ?
会出现什么问题? It seems like Cakephp tries to use Sqlite but I use MySQL ?
似乎Cakephp尝试使用Sqlite,但我使用MySQL?
Inside config\\app.php
在
config\\app.php
里面
'Datasources' => [
'default' => [
'className' => 'Cake\Database\Connection',
'driver' => 'Cake\Database\Driver\Mysql',
'persistent' => false,
'host' => 'localhost',
/**
* CakePHP will use the default DB port based on the driver selected
* MySQL on MAMP uses port 8889, MAMP users will want to uncomment
* the following line and set the port accordingly
*/
//'port' => 'nonstandard_port_number',
'username' => 'myuser',
'password' => 'mypass',
'database' => 'mydatabase',
'encoding' => 'utf8',
'timezone' => 'UTC',
'cacheMetadata' => true,
/**
* Set identifier quoting to true if you are using reserved words or
* special characters in your table or column names. Enabling this
* setting will result in queries built using the Query Builder having
* identifiers quoted when creating SQL. It should be noted that this
* decreases performance because each query needs to be traversed and
* manipulated before being executed.
*/
'quoteIdentifiers' => false,
],
],
Error 错误
Error: [PDOException] SQLSTATE[HY000] [14] unable to open database file
Request URL: /mycontroller/
Stack Trace:
#0 /var/www/vhosts/example.com/httpdocs/vendor/cakephp/cakephp/src/Database/Driver/PDODriverTrait.php(48): PDO->__construct('sqlite:/var/www...', NULL, NULL, Array)
#1 /var/www/vhosts/example.com/httpdocs/vendor/cakephp/cakephp/src/Database/Driver/Sqlite.php(61): Cake\Database\Driver\Sqlite->_connect('sqlite:/var/www...', Array)
#2 /var/www/vhosts/example.com/httpdocs/vendor/cakephp/cakephp/src/Database/Schema/BaseSchema.php(46): Cake\Database\Driver\Sqlite->connect()
#3 /var/www/vhosts/example.com/httpdocs/vendor/cakephp/cakephp/src/Database/Dialect/SqliteDialectTrait.php(169): Cake\Database\Schema\BaseSchema->__construct(Object(Cake\Database\Driver\Sqlite))
#4 /var/www/vhosts/example.com/httpdocs/vendor/cakephp/cakephp/src/Database/Schema/Collection.php(52): Cake\Database\Driver\Sqlite->schemaDialect()
#5 /var/www/vhosts/example.com/httpdocs/vendor/cakephp/cakephp/src/Database/Schema/CachedCollection.php(44): Cake\Database\Schema\Collection->__construct(Object(Cake\Database\Connection))
#6 /var/www/vhosts/example.com/httpdocs/vendor/cakephp/cakephp/src/Database/Connection.php(319): Cake\Database\Schema\CachedCollection->__construct(Object(Cake\Database\Connection), true)
#7 /var/www/vhosts/example.com/httpdocs/vendor/cakephp/debug_kit/src/Model/Table/LazyTableTrait.php(40): Cake\Database\Connection->schemaCollection()
#8 /var/www/vhosts/example.com/httpdocs/vendor/cakephp/debug_kit/src/Model/Table/RequestsTable.php(43): DebugKit\Model\Table\RequestsTable->ensureTables(Array)
#9 /var/www/vhosts/example.com/httpdocs/vendor/cakephp/cakephp/src/ORM/Table.php(285): DebugKit\Model\Table\RequestsTable->initialize(Array)
#10 /var/www/vhosts/example.com/httpdocs/vendor/cakephp/cakephp/src/ORM/TableRegistry.php(196): Cake\ORM\Table->__construct(Array)
#11 /var/www/vhosts/example.com/httpdocs/vendor/cakephp/debug_kit/src/Routing/Filter/DebugBarFilter.php(186): Cake\ORM\TableRegistry::get('DebugKit.Reques...')
#12 /var/www/vhosts/example.com/httpdocs/vendor/cakephp/cakephp/src/Event/EventManager.php(389): DebugKit\Routing\Filter\DebugBarFilter->afterDispatch(Object(Cake\Event\Event), Object(Cake\Network\Request), Object(Cake\Network\Response))
#13 /var/www/vhosts/example.com/httpdocs/vendor/cakephp/cakephp/src/Event/EventManager.php(355): Cake\Event\EventManager->_callListener(Array, Object(Cake\Event\Event))
#14 /var/www/vhosts/example.com/httpdocs/vendor/cakephp/cakephp/src/Event/EventManagerTrait.php(78): Cake\Event\EventManager->dispatch(Object(Cake\Event\Event))
#15 /var/www/vhosts/example.com/httpdocs/vendor/cakephp/cakephp/src/Routing/Dispatcher.php(92): Cake\Routing\Dispatcher->dispatchEvent('Dispatcher.afte...', Array)
#16 /var/www/vhosts/example.com/httpdocs/webroot/index.php(37): Cake\Routing\Dispatcher->dispatch(Object(Cake\Network\Request), Object(Cake\Network\Response))
#17 {main}
If you look a little closer at the stacktrace, you'll notice that this doesn't stem from your apps connections, but from the DebugKit plugin, which by default uses SQLite for storing panel and request details, and most probably the target directory/file isn't writable. 如果你仔细看看堆栈跟踪,你会发现这不是来自你的应用程序连接,而是来自DebugKit插件,它默认使用SQLite来存储面板和请求细节,而且很可能是目标目录/文件不可写。
Cookbook > DebugKit Cookbook> DebugKit
[...]
[...]
DebugKit Storage
DebugKit存储
By default, DebugKit uses a small SQLite database in your application's
/tmp
directory to store the panel data.默认情况下,DebugKit在应用程序的
/tmp
目录中使用一个小的SQLite数据库来存储面板数据。 If you'd like DebugKit to store its data elsewhere, you should define adebug_kit
connection.如果您希望DebugKit将其数据存储在其他位置,则应定义
debug_kit
连接。Database Configuration
数据库配置
By default DebugKit will store panel data into a SQLite database in your application's
tmp
directory.默认情况下,DebugKit会将面板数据存储到应用程序的
tmp
目录中的SQLite数据库中。 If you cannot installpdo_sqlite
, you can configure DebugKit to use a different database by defining adebug_kit
connection in yourconfig/app.php
file.如果无法安装
pdo_sqlite
,则可以通过在config/app.php
文件中定义debug_kit
连接来配置DebugKit以使用其他数据库。[...]
[...]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.