我是非常新的php,每当我尝试加载需要访问我在 phpMyAdmin
上设置的数据库的php页面时,我都会收到错误以下是错误:
数据库连接失败:无法连接到本地MySQL服务器 通过socket'/tmp/mysql.sock'(46)(2002)
我用于连接的代码是:
<?php
define("DB_SERVER", "localhost");
define("DB_USER", "xxxx");
define("DB_PASS", "xxxx");
define("DB_NAME", "tester");
$connection = mysqli_connect(DB_SERVER, DB_USER, DB_PASS, DB_NAME);
// Test if connection occurred.
if(mysqli_connect_errno()) {
die("Database connection failed: " .
mysqli_connect_error() .
" (" . mysqli_connect_errno() . ")"
);
}
?>
我按照托管我网站的网站上的说明在我的服务器上设置了phpMyAdmin,所以我很确定我做得正确。
我之前能够通过 WAMP 让我的计算机上的数据库正常工作,但这是我第一次尝试让所有内容在线工作,所以我不知道如果这是我的一个愚蠢的错误,或者它是更大的东西。
我不知道套接字是什么,所以我不知道如何解决这个问题。
感谢您的帮助!!
答案 0 :(得分:0)
这意味着你没有访问phpMyAdmin的权限,或者那个套接字不存在。尝试重新安装phpMyAdmin。
答案 1 :(得分:0)
您必须找到一种连接MySQL实例的方法。有两种方法,TCP(网络,即使该网络地址是127.0.0.1)和套接字(文件,如/var/run/mysqld/mysql.sock)。一般来说,MySQL是开箱即用的,可以同时监听两者,而且一般来说两者之间几乎没有什么区别。在创建或编辑与连接类型匹配的权限时,您必须要小心,用户bob @ localhost与用户bob@127.0.0.1不同。我倾向于使用套接字,这也是您的脚本默认尝试执行的操作。你可以告诉它通过TCP连接,但是告诉它正确的套接字路径也很容易。
无论如何,对我而言,解决问题的最快方法是尝试使用命令行工具。如果您可以在命令行执行mysql -u root -p
并获取MYSQL&gt; shell提示符,键入“STATUS”并查找Connection行,该行可能通过UNIX套接字读取Localhost;然后你可能会看到像“UNIX socket:/var/run/mysqld/mysql.sock”这样的行,在这种情况下,你只需告诉你的PHP脚本或全局PHP配置有关套接字路径,因为现在它正在寻找/tmp/mysql.sock不存在。
你也可以在登录phpMyAdmin时看到这个,它应该在页面的右侧显示一些“数据库服务器”信息 - 在这里查看“服务器”行可能会读到类似“phpMyAdmin demo”的内容 - MySQL(通过TCP / IP实现192.168.30.23“(清楚地表示您通过TCP连接)。
无论如何,无论您使用哪种方法查找套接字路径或决定使用TCP网络,请参阅PHP manual page以获取有关使用该网络进行连接的信息。您也可以在php.ini中为套接字设置全局路径(我建议您这样做),然后您不必在每个脚本中手动设置它,因为它只使用php.ini设置默认。您可能需要为pdo_mysql.default_socket,mysql.default_socket和mysqli.default_socket设置每个值(虽然在您的代码中您只使用mysqli,所以从技术上讲,您只需要设置最后一个值...但为什么要冒险将你未来的自我混淆为诸如“为什么mysqli会工作但是pdo失败?”这样的问题 - 现在就把它们全部设置好并且不要担心它。)
希望这有帮助。