从服务器外部通过 PHP 访问数据库

从服务器外部通过 PHP 访问数据库

我有一个正在运行的 VPSapachemysql服务器。基本上,我从也托管在同一台服务器上的网站更新我的数据库,这就是为什么当我通过PHP我用来127.0.0.1建立连接的文件连接到数据库时,我可以成功连接并插入行。

然而,最近,我尝试通过php服务器外部且驻留在不同 VPS 上的脚本连接并将行插入到我的数据库,但出现了以下错误。 ( ! ) Warning: mysql_query(): Access denied for user ''@'localhost' (using password: NO) in C:\wamp64\www\test.php on line 13

我希望我的mySql服务器也能接受来自本地主机外部的连接。

答案1

您可以使用以下命令授予用户所有所需的权限:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'
IDENTIFIED BY 'your_pass'
WITH GRANT OPTION;
FLUSH PRIVILEGES;`

%表示所有主机,这样指定的用户可以从任何 IP 地址访问数据库。如果您有自己的 IP 地址,则可以指定自己的 IP 地址。

如果你有防火墙,不要忘记在 VPS 上添加例外。如果你使用防火墙,ufw则可以执行以下操作:

sudo ufw allow 3306/tcp
sudo service ufw restart

最后,如果您使用 Ubuntu,不要忘记my.cnf在您的系统上进行编辑/etc/mysql/my.cnf。使用您最喜欢的文本编辑器打开文件:例如 nano:sudo nano /etc/mysql/my.cnf 然后添加以下内容:

[mysqld] 
bind-address= your-server-ip-address
#skip-networking

保存文件并退出。然后别忘了运行 sudo systemctl restart mysql

你可以使用这个 php 脚本测试你的工作

<?php
$dbname = 'dbname';
$dbuser = 'db_user';
$dbpass = 'db_pass';
$dbhost = 'your-server-ip-address';

try {
   $connection = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, 
   $dbpass);

 $connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
   echo "Connected successfully"; 
 }
catch(PDOException $e)
   {
     echo "Connection failed: " . $e->getMessage();
   }

相关内容