简体   繁体   English

CakePHP SQLSTATE [HY000] [14]错误

[英]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 a debug_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 install pdo_sqlite , you can configure DebugKit to use a different database by defining a debug_kit connection in your config/app.php file. 如果无法安装pdo_sqlite ,则可以通过在config/app.php文件中定义debug_kit连接来配置DebugKit以使用其他数据库。

[...] [...]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM