我在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授予对特定数据库的访问权限?
芬利我发现了回应。就像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正确的用户和密码(或没有密码)。