Php 对'的访问被拒绝;用户'@';本地主机';

Php 对'的访问被拒绝;用户'@';本地主机';,php,mysql,phalcon,Php,Mysql,Phalcon,我正在尝试使用phalcon创建模型。但是当我键入phalcon model polls时,我得到一个错误,用户'root'@'localhost'(使用密码:YES)的访问被拒绝 我可以使用mysql-p进入mysql。所以我试着创建一个新用户,并授予他所有的特权,但没用。我还可以使用root和密码登录phpmyadmin。我还试图在配置文件中将端口指定为3306,但仍然没有 我的配置文件: defined('BASE_PATH') || define('BASE_PATH', getenv(

我正在尝试使用phalcon创建模型。但是当我键入
phalcon model polls
时,我得到一个错误,用户'root'@'localhost'(使用密码:YES)的访问被拒绝

我可以使用
mysql-p
进入mysql。所以我试着创建一个新用户,并授予他所有的特权,但没用。我还可以使用root和密码登录phpmyadmin。我还试图在配置文件中将端口指定为3306,但仍然没有

我的配置文件:

defined('BASE_PATH') || define('BASE_PATH', getenv('BASE_PATH') ?: realpath(dirname(__FILE__) . '/../..'));
defined('APP_PATH') || define('APP_PATH', BASE_PATH . '/app');

return new \Phalcon\Config([
    'database' => [
        'adapter' => 'Mysql',
        'host' => 'localhost',
        'port' => 3306,
        'username' => 'root',
        'password' => '$Pass1234 ',
        'dbname' => 'poll_db',
        'charset' => 'utf8',
    ],
    'application' => [
        'appDir' => APP_PATH . '/',
        'controllersDir' => APP_PATH . '/controllers/',
        'modelsDir' => APP_PATH . '/models/',
        'migrationsDir' => APP_PATH . '/migrations/',
        'viewsDir' => APP_PATH . '/views/',
        'pluginsDir' => APP_PATH . '/plugins/',
        'libraryDir' => APP_PATH . '/library/',
        'cacheDir' => BASE_PATH . '/cache/',

        // This allows the baseUri to be understand project paths that are not in the root directory
        // of the webpspace.  This will break if the public/index.php entry point is moved or
        // possibly if the web server rewrite rules are changed. This can also be set to a static path.
        'baseUri' => preg_replace('/public([\/\\\\])index.php$/', '', $_SERVER["PHP_SELF"]),
    ]
]);
p.S我通过
mysql-u root-p

p.p.S我也使用了
FLUSH特权
,然后重新启动了mysql,但什么都没有。谢谢你以后的帮助

UPD:我还尝试在laravel中创建项目,并使迁移和一切工作正常。我还使用了root+密码

解决方法:我不知道为什么,但我决定创建一个新项目,即使使用“root”@“localhost”,一切都很好。第一个项目好像出了点问题。尽管如此,还是要感谢所有参与帮助的人


p.S我将应答标记为解决方案,仅适用于将来可能遇到相同错误的人。

我不认为这是端口问题,请求正在到达目的地。使用
root@localhost
将在通过命令行(
mysql-u root-p
)登录时工作,但您不想将其用于连接代码。请记住,在建立连接时,需要明确使用
host=localhost
host=127.0.0.1
。如果您使用IP地址(即使在同一台服务器上),您将被拒绝访问

[user@localhost ~]# mysql --host=127.0.0.1 --protocol=TCP -u root -p
Enter password:
mysql>
[user@localhost ~]# mysql --host=192.168.1.10 --protocol=TCP -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'hostname' (using password: YES)
以下是我建议采取的步骤:

  • 创建可用于在脚本中连接的专用用户
  • 若脚本的源和MySQL的服务器相同

    CREATE USER '<user>'@'localhost'
    IDENTIFIED BY 'password';
    GRANT ALL
    ON <database>.*
    TO '<user>'@'localhost';
    
    创建用户“”@'localhost'
    由“密码”标识;
    全数同意
    开*
    到“”@'localhost';
    
  • 如果连接总是从同一个位置建立的,但与MySQL的位置不同,请在命令行上运行以下命令

    CREATE USER '<user>'@'<IP_address>'
    IDENTIFIED BY 'password';
    GRANT ALL
    ON <database>.*
    TO '<user>'@'<IP_address>';
    
    创建用户“”@“
    由“密码”标识;
    全数同意
    开*
    至“@”;
    
  • 如果连接源不同,请运行以下命令

    CREATE USER '<user>'@'<IP_address>'
    IDENTIFIED BY 'password';
    GRANT ALL
    ON <database>.*
    TO '<user>'@'%';
    
    创建用户“”@“
    由“密码”标识;
    全数同意
    开*
    到“@%”;
    

  • 如果您有任何疑问,这里有一个指向的链接。

    您如何在DI容器中注册数据库服务?@NikolaosDimopoulos我没有在DI容器中注册服务,我在phalcon是全新的。您是使用socket还是tcp连接在Laravel中的MySQL服务器?@Koalayeng我不确定,我使用composer create project创建项目,然后使用hust modify.env文件在您的Laravel的
    .env
    文件中是否有
    DB_PORT
    “您不想用它连接代码”如果OP是通过TCP(在他们的代码中)连接的,我相信不会。除非root拥有
    'root'@'
    特权,但情况似乎并非如此。我一直认为
    localhost
    的默认设置是(尝试)使用套接字。通常,如果您想要强制执行TCP,您可以使用
    127.0.0.1
    来测试一些不同的场景。例如,如果他们实际上正在使用localhost建立连接,那么这种连接可能会起作用。但是,如果他们使用的是IP地址(除127.0.0.1之外),我认为不会。Idk为什么,但我创建了新项目,所有这些都开始正常工作,包括根用户。