gpt4 book ai didi

php - 为什么不能使用 PDO 访问特定的数据库,但可以使用没有 DBname 的 mysqli? (使用开发服务器/phpmyadmin)?

转载 作者:行者123 更新时间:2023-11-30 21:34:24 25 4
gpt4 key购买 nike

我在 Windows 10 x64 机器上安装了 easyphp/devserver (v17.0)。使用表格并测试以使用简单的 php 文件存储远程数据(对于数据库来说非常新)。我正在尝试为我的项目设置对我的数据库的访问权限(最好使用 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),但可以在不使用数据库名称“arduDB”的情况下使用 MYSQLI。

我从 phpmyadmin 中删除了 '' (Any) 用户,但仍然无法使用 PDO 访问。一整天都在搜索和阅读有关此问题的信息,但找不到发生这种情况的原因。我还使用密码创建了另一个用户,但也无法使用 PDO 访问数据库。

看来phpmyadmin不能关联数据库的权限,

已编辑这个“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!!!";
?>

在网络浏览器中显示“已连接”。但是,如果我尝试使用 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 授予对特定数据库的访问权限?

最佳答案

Finlay 我找到了答案。正如 André Verwijs 在他的帖子中所说,phpmyadmins 使用“unix_socket”将用户密码存储在“mysql”数据库中。这就是即使为任何用户创建或更改密码,在 phpmyadmin 的“用户帐户”部分的密码列中始终显示“否”的动机。要解决此问题,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 数据库中的密码。现在可以使用正确的用户和密码(或没有密码)访问我的数据库。

关于php - 为什么不能使用 PDO 访问特定的数据库,但可以使用没有 DBname 的 mysqli? (使用开发服务器/phpmyadmin)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54718391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com