我需要使用 php 页面连接到远程 mysql 服务器;
连接本身很有魅力,但是当我尝试创建数据库时,因为它尚不存在,我收到此错误:
带有消息“SQLSTATE[42000]”的异常“PDOException”:语法错误或访问冲突:1044 用户“[myusername]”@“%”对 [myurl]/php/db_manager.php 中的数据库“[mydbname]”的访问被拒绝:76
如您所见,我对“%”的访问被拒绝。
现在:什么是“%”?
此外:
private function createDB() {
if($this->cm->update("CREATE DATABASE IF NOT EXISTS " . $this->dbName . " DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;", array())) { // Error here
$this->cm->update("USE " . $this->dbName . ";", array());
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
$this->cm 是一个正确初始化的 PDO 包装器的实例
public function update($query, $values)
try{
$sql = $this->db->prepare($query);
$sql->execute($values);
return true;
} catch(PDOException $e) {
$this->l->error($e); // <- Error here
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
$this->db 是一个正确实例化的、完全连接的 PDO 对象;
这些是用于连接的线
$this->db = new PDO($connection, $this->db_user, $this->db_password, array(PDO::ATTR_PERSISTENT => true));
$this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
Run Code Online (Sandbox Code Playgroud)
我对 Mysql 服务器有完全访问权限
用户 '[myusername]'@'%'对数据库 '[mydbname]' 的访问被拒绝
MySQL 权限是细粒度的:并非所有用户都可以完全访问服务器上的所有数据库。
您需要以管理员身份登录并授予适当的权限。例如,授予完全访问权限:
GRANT ALL
ON mydbname.*
TO 'myusername'@'%'
WITH GRANT OPTION;
FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)
...或者您可以根据自己的喜好更有选择性:
GRANT SELECT, ALTER, CREATE, DELETE, DROP, INDEX, INSERT, REFERENCES, TRIGGER, UPDATE
ON mydbname.*
TO 'myusername'@'%';
FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)
请查看MySQL 支持的权限以获取完整列表。
%是帐户名和密码中详细解释的通配符,表示“来自任何主机的连接”。