我是PHP和CakePHP的新手。我在使用CakePHP连接数据库时发现了问题。
下面是我的应用程序配置。
我在Bitnami WAMP堆栈5.4.40-0上。我正在使用CakePHP 3.0.4创建一个Web MVC应用程序app.php
文件中的数据源条目。
/**
* Connection information used by the ORM to connect
* to your application's datastores.
* Drivers include Mysql Postgres Sqlite Sqlserver
* See vendor\cakephp\cakephp\src\Database\Driver for complete list
*/
'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' => 'test2',
'password' => 'computer',
'database' => 'jobs',
'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,
/**
* During development, if using MySQL < 5.6, uncommenting the
* following line could boost the speed at which schema metadata is
* fetched from the database. It can also be set directly with the
* mysql configuration directive 'innodb_stats_on_metadata = 0'
* which is the recommended value in production environments
*/
//'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'],
],
我已经根据CakePHP惯例创建了一个名为 jobs 的数据库表。用户test 2拥有与root管理员相同的全局权限。
但是,当我运行bake all命令时,我收到以下错误:
2015-07-01 06:24:56 Error: [PDOException] SQLSTATE[HY000] [1045] Access denied for user 'test2'@'localhost' (using password: YES)
Stack Trace:
C:\Bitnami\wampstack-5.4.40-0\apache2\htdocs\myjobs\vendor\cakephp\cakephp\src\Database\Driver\PDODriverTrait.php(48): PDO->__construct('mysql:host=127....', 'test2', 'computer', Array)
C:\Bitnami\wampstack-5.4.40-0\apache2\htdocs\myjobs\vendor\cakephp\cakephp\src\Database\Driver\Mysql.php(89): Cake\Database\Driver\Mysql->_connect('mysql:host=127....', Array)
C:\Bitnami\wampstack-5.4.40-0\apache2\htdocs\myjobs\vendor\cakephp\cakephp\src\Database\Schema\BaseSchema.php(46): Cake\Database\Driver\Mysql->connect()
问题已解决(更新)
我按照安基特和斯宾塞的指示去做。
我有几个问题。
1.我的用户的主机不是localhost;它是一个通配符%
。更改后,MySQL开始拒绝连接。
1.我禁用了我的防火墙,发现端口与3306不一样。所以我更改了app.php
中的条目。现在我的应用程序被烘焙了:)
5条答案
按热度按时间dgtucam11#
该错误消息通常意味着我们使用的密码与MySQL认为的连接用户的密码不匹配,或者匹配的MySQL用户不存在(尚未创建)。
在MySQL中,用户由用户名(“test2”)和主机(“localhost”)标识。
该错误消息标识了 user(“test2”)和 host(“localhost”)值...
我们可以从一个可以连接的客户端使用此查询来检查用户是否存在:
我们要查找的行中,“test2”代表 user,“localhost”代表 host。
如果该行不存在,则可以将主机设置为通配符值
%
,以匹配不匹配的任何其他主机。如果该行存在,则密码可能不匹配。我们可以更改密码(如果我们以具有足够权限的用户身份连接,例如
root
我们还可以验证用户是否对数据库中的对象具有特权。
编辑
如果我们使用DML操作(INSERT,UPDATE,DELETE)对mysql权限表进行更改,这些更改将在MySQL重新读取这些表后生效。我们可以使用
FLUSH PRIVILEGES
语句强制重新读取这些表,并由特权用户执行,使更改生效。t9eec4r02#
检查以下事项
b5buobof3#
我看到问题已经解决了,但我还是想分享一个对我有效的解决方案。
.env文件:
MySQL管理员:
Thank you, spencer7593
控制台:
现在对我有用了。
Larasts的回答
a1o7rhls4#
如果使用MAMP,则可能需要设置套接字:unix套接字:/应用程序/MAMP/临时文件/mysql/mysql.sock
jchrr9hc5#
我想补充一下上面的答案,这里提出的解决方案没有一个对我有效。我的WAMP在端口3308上工作,而不是默认安装的3306。我发现,当在本地环境中工作时,如果你在计算机中使用mysqladmin(用于测试环境),并且如果您使用的端口不是3306,则必须使用值localhost:NumberOfThePort定义变量DB_SERVER,因此它将如下所示:define(“DB_SERVER”,“localhost:3308”)。您可以通过右键单击任务栏中的WAMP图标(在隐藏图标部分)并选择“工具”来获取此值。您将看到以下部分:“MySQL使用的端口:端口号”
这将修复与数据库的连接。
这是我得到的错误:错误:SQLSTATE[HY 1045]第X行上的用户'username'@'localhost'的访问被拒绝。
我希望这能帮到你。
:)