我正在尝试使用PHP连接来连接phpmyadmin上的MySQL数据库。关于连接只是试图查看连接是否成功,没什么好看的。我正在使用MAMP来托管数据库,我尝试使用的连接是:
<?php
$servername = "127.0.0.1";
$username = "root";
$password = "root";
try {
$conn = new PDO("mysql:host=$servername;dbname=AppDatabase", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected successfully";
}
catch(PDOException $e)
{
echo "Connection failed: " . $e->getMessage();
}
?>
我一直在使用postman来测试连接是否正常,但我一直收到此错误消息:
连接失败:SQLSTATE [HY000] [2002]拒绝连接
在收到错误消息之前:
连接失败:SQLSTATE [HY000] [2002]没有这样的文件或目录
这是因为我已将服务器名设置为localhost,通过将其更改为IP地址,它已拒绝连接,我不知道有什么问题。
对此有任何帮助将不胜感激。
答案 0 :(得分:34)
我找到了连接无法正常工作的原因,这是因为当需要连接到端口8889时,连接尝试连接到端口8888。
$conn = new PDO("mysql:host=$servername;port=8889;dbname=AppDatabase", $username, $password);
这解决了这个问题,虽然将服务器名称更改为localhost仍然会出错。
连接失败:SQLSTATE [HY000] [2002]没有这样的文件或目录
但是,当为服务器名称输入IP地址时,它会成功连接。
答案 1 :(得分:3)
在我的情况下,MySQL服务器未运行。我重新启动了MySQL服务器,问题已解决。
//on ubuntu server
sudo /etc/init.d/mysql start
为避免MySQL停止问题,可以在Ubuntu 14.04 LTS Linux中使用“ initctl”实用程序来确保服务在出现故障或重新启动时重新启动。为了进行数据保留,请在执行此操作之前考虑对根卷快照(在mysql停止的情况下)[8]。您可以使用以下命令通过带有停止和启动操作的“ initctl”实用程序来管理mysql服务。
$ sudo initctl stop mysql
$ sudo initctl start mysql
要验证其正常工作,您可以检查服务状态并获取 进程ID(pid),通过杀死“ mysql”来模拟失败 进程并在之后使用新进程ID验证其状态为正在运行 有时(通常在1分钟之内)使用以下命令。
$ sudo initctl status mysql # get pid
$ sudo kill -9 <pid> # kill mysql process
$ sudo initctl status mysql # verify status as running after sometime
答案 2 :(得分:0)
使用MAMP,我将host=localhost
更改为host=127.0.0.1
。但是出现了一个新问题,“连接被拒绝”
通过将'port' => '8889'
放在'Datasources' => [
中来解决此问题
答案 3 :(得分:0)
我通过在终端中运行此命令来获得解决方案。
sudo killall mysqld
答案 4 :(得分:0)
对我来说,是Mac而不是MAMP的php版本,.bash_profile上的PATH变量是错误的。我只是将MAMP PHP bin文件夹放在$ PATH env变量之前。对我来说是
/Applications/mampstack-7.1.21-0/php/bin
在终端中,运行vim ~/.bash_profile
以打开~/.bash_profile
键入i以能够编辑文件,将bin目录作为文件顶部的PATH变量添加到文件中:
export PATH =“ / Applications / mampstack-7.1.21-0 / php / bin /:$ PATH”
命中ESC
,键入:wq
,然后按Enter
source ~/.bash_profile
which php
中,输出应为MAMP PHP安装的路径。答案 5 :(得分:0)
在Mac上使用MAMP,我通过重命名解决了问题
/Applications/MAMP/tmp/mysql/mysql.sock.lock
到
/Applications/MAMP/tmp/mysql/mysql.sock
答案 6 :(得分:0)
我需要使用 SSL 进行连接,并且需要在 PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT
选项数组中将 new PDO
设置为 false,除了 CA 文件的条目 PDO::MYSQL_ATTR_SSL_CA
。
没有它,服务器上的 mysql 日志很有帮助地提到
2021-07-27 17:02:51 597605 [Warning] Aborted connection 597605 to db: 'unconnected' user: 'unauthenticated' host: '192.168.10.123' (This connection closed normally without authentication)
我肯定在 DSN 中传递了正确的数据库和用户名等。一个空的选项数组将至少在错误日志中显示数据库和用户。我确信这些事情有一个有效的技术原因。
我正在添加此信息,以便我可以在下次访问此页面时更轻松地找到它..
在 SSL 的上下文中,如果主机名在证书中用作 CN(通用名称),我也看到了使用 IP 地址而不是主机名进行连接时的错误。
答案 7 :(得分:-2)
如果你还在为拒绝连接而苦苦挣扎,这里是我的建议。下载 XAMPP 或其他类似软件并启动 MySQL。您不必只运行 MySQL 即可运行 apache 或其他东西。