为什么不能使用PDO访问特定的数据库,但可以使用没有DBname的mysqli? (使用dev server / phpmyadmin)?

问题描述 投票:1回答:1

我在windows 10 x64机器上安装easyphp / devserver(v17.0)。使用表和测试来使用简单的php文件存储远程数据(非常新的DataBases)。我正在尝试为我的项目设置访问我的数据库(最好使用PDO)。

通过mysql命令设置所有数据库:

CREATE database arduDB;
CREATE USER 'Atmega'@'localhost';
GRANT USAGE on *.* to 'Atmega'@'localhost';
GRANT ALL PRIVILEGES ON arduDB.* TO 'Atmega'@'localhost';
CREATE USER 'Atmega'@'%';
GRANT USAGE on *.* to 'Atmega'@'%';
GRANT ALL PRIVILEGES ON arduDB.* TO 'Atmega'@'%';
FLUSH PRIVILEGES;

一切都很好。

但无法使用PDO访问我的数据库(arduDB),但可以使用MYSQLI而不使用数据库名称'arduDB'。

我从phpmyadmin删除了''(Any)用户,但仍无法使用PDO访问。整天搜索和阅读这个问题,但找不到发生这种情况的原因。我也创建了另一个用密码的用户,但是也无法使用PDO访问DB。

看来phpmyadmin无法关联DB的权限,

编辑这个'add.php',不使用'arduDB'名称通过MYSQLI进行访问:

<?php
    $servername = "localhost";
    $username = "Atmega";

    // Create connection
    $conn = new mysqli($servername, $username);

    // Check connection
    if ($conn->connect_error) {
        die("Failed: " . $conn->connect_error);
    }
    echo "Connected!!!";
?>

在Web浏览器中显示“已连接”。但如果我尝试使用arduDB参数,则会出现同样的错误。

但是当我使用PDO,指示arduDB数据库时,我无法访问我的数据库。

<?php
    $servername = "localhost";
    $username = "Atmega";

try {
    $conn = new PDO("mysql:host=$servername;dbname=arduDB", $username);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connected!!!";
    }
catch(PDOException $e)
    {
    echo "Failed: " . $e->getMessage();
    }
?>

SQLSTATE [HY000] [1044]拒绝用户''@ localhost'访问数据库'ardudb'或SQLSTATE [HY000] [1044]访问被拒绝用户'Atmega'@'localhost'到数据库'ardudb'

请问,我需要在我的代码中配置或使用什么才能在我的项目中使用PDO授予对特定数据库的访问权限?

php mysql windows easyphp devserver
1个回答
0
投票

芬利我发现了回应。就像AndréVerwijs在帖子中所说,phpmyadmins使用“unix_socket”将用户密码存储在'mysql'db中。这是动机,即使为任何用户创建或更改密码,在phpmyadmin的“用户帐户”部分中,在密码栏中始终显示为“NO”。要解决这个问题,AndréVerwijs建议在mysql控制台中执行此操作:

use mysql;

SELECT user, plugin FROM user;

UPDATE user SET plugin="mysql_native_password"; 

update user set authentication_string=password('USE-HERE-PASSWORD'), plugin='mysql_native_password' where user='Atmega';

FLUSH PRIVILEGES;

有了这个phpmyadmin将使用插件“mysql_native_password”为mysql DB中的密码。现在可以访问我的数据库whit正确的用户和密码(或没有密码)。

© www.soinside.com 2019 - 2024. All rights reserved.