无法连接到本地mysql

Posted

技术标签:

【中文标题】无法连接到本地mysql【英文标题】:Cannot connect to local mysql 【发布时间】:2015-05-02 03:14:32 【问题描述】:

我正在尝试连接到名为 BetaPoints 的数据库。所有凭据都位于一个php文件名EstablishAccess.php中,格式为

<?php
  define (DB_USER, "BetaPoints");
  define (DB_PASSWORD, "password!");
  define (DB_DATABASE, "BetaPoints");
  define (DB_HOST, "hostname");
?>

我正在尝试用这个连接到数据库

$connctn=mysql_connect($DB_HOST,$DB_USER,$DB_PASSWORD)
or die("cannot connect to database");
mysql_selectdb('BetaPoints')
or die('cannot select database');

我收到此错误:

注意:未定义变量:/home/content/06/8274306/html/beta/mysuperscript.php 第 6 行中的 DB_HOST

注意:未定义变量:/home/content/06/8274306/html/beta/mysuperscript.php 第 6 行中的 DB_USER

注意:未定义变量:/home/content/06/8274306/html/beta/mysuperscript.php 第 6 行中的 DB_PASSWORD

警告:mysqli_connect() [function.mysqli-connect]: (HY000/2002): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) in /home /content/06/8274306/html/beta/mysuperscript.php 在第 6 行 无法连接数据库

我已经在我的变量中查找错误,并且我已经使用我为这些变量定义的凭据多次登录,但我仍然无法找到错误。

它说当我知道它不是本地数据库时,我无法连接到本地 MySQL 数据库。

如果有人有任何建议,请在下面发布。我正在寻求帮助,以查找有关问题所在以及我可以采取的任何解决方案的更多信息。

【问题讨论】:

向它传递一个额外的参数 mysql_selectdb('BetaPoints', $connctn) - 请使用最新的 API,例如 mysqli_ 或 PDO。将错误报告添加到您打开 PHP 标记之后的文件顶部,例如 &lt;?php error_reporting(E_ALL); ini_set('display_errors', 1);,然后是其余代码,以查看它是否产生任何结果。如果您收到弃用通知,那么您就会知道该使用什么。 我在文档中添加了错误报告,我正在使用 require ("EstablishAccess.php");要拥有这个变量,我需要连接传输到 php 文件中,并且错误报告说它们没有定义。我应该使用不同的功能来做我需要做的事情吗? 根据您的编辑,在您发布之前我确实对我的答案进行了编辑。重新加载它以查看我所做的更改。但是mysqli_connect() 来自哪里?你不能像那样混合 API。 【参考方案1】:

编辑:首先,您声明constants,因此不需要$ 变量语法。

$connctn=mysql_connect(DB_HOST,DB_USER,DB_PASSWORD)

因此,请确保为所有常量使用正确的数据。

另外,mysql_selectdb('BetaPoints') 的语法不正确。

selectdb 之间缺少下划线。

使用mysql_select_db('BetaPoints')mysql_select_db('BetaPoints', $connctn)

咨询,并按照:http://php.net/manual/en/function.mysql-select-db.php

手册中的示例:

<?php

$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) 
    die('Not connected : ' . mysql_error());


// make foo the current db
$db_selected = mysql_select_db('foo', $link);
if (!$db_selected) 
    die ('Can\'t use foo : ' . mysql_error());

?>

但是,mysql_ 函数已被弃用,将从未来的版本中删除。

使用die('Not connected : ' . mysql_error()) 代替or die('cannot select database')

考虑查看mysqli with prepared statementsPDO with prepared statements它们更安全

根据您的编辑:

警告:mysqli_connect() [function.mysqli-connect]: (HY000/2002): 无法通过套接字 '/var/lib/mysql/mysql.sock' 连接到本地 MySQL 服务器 (2)在 /home/content/06/8274306/html/beta/mysuperscript.php 第 6 行无法连接到数据库

您将mysqli_ 函数与mysql_ 包含并混合在某个您没有告诉我们您如何使用它们的地方。

这些不同的 API 不会相互混合。

仅使用一个 MySQL API;不是两者兼而有之。

参考手册:

http://php.net/manual/en/function.mysqli-connect.php

mysqli_connect() 手册中的示例:

<?php
//conection:
$link = mysqli_connect("myhost","myuser","mypassw","mydb") 
or die("Error " . mysqli_error($link));

//consultation:

$query = "SELECT name FROM mytable" 
or die("Error in the consult.." . mysqli_error($link));

//execute the query.

$result = mysqli_query($link, $query);

//display information:

while($row = mysqli_fetch_array($result)) 
  echo $row["name"] . "<br>";

?> 

【讨论】:

使用 include() 或 require() 函数来导入我的变量会更好吗?我认为这就是它没有连接的原因,因为我的数据库变量没有被定义。 这个关于 Stack 的问答会更好地解释它***.com/q/3633900@user3600462 如果我给您的答案已经解决了连接问题,请考虑接受它并将问题标记为已解决。如果你不知道meta.stackexchange.com/questions/5234/…@user3600462 @user3600462 等等我注意到另一个错误。我将编辑我的答案。给我一分钟左右。 @user3600462 重新加载我的答案。您正在使用常量,因此不需要 $ 符号。【参考方案2】:

您已经定义了常量,然后将它们称为变量。这就是错误。 DB_USER、DB_PASSWORD、DB_DATABASE、DB_HOST 是常量,应该像这样使用:DB_USER 而不是 $DB_USER。

我还建议使用如下引号声明它们:

define ("DB_USER", "BetaPoints");

然后,正如另一个用户首先评论的那样,mysql_selectdb 语法是错误的。正确的语法是 mysql_select_db ("db_name");

【讨论】:

以上是关于无法连接到本地mysql的主要内容,如果未能解决你的问题,请参考以下文章

MySQL Workbench 连接到 AWS,收到错误“无法连接到本地主机”

无法通过套接字连接到本地 MySQL 服务器

无法建立从工作台到 nodejs 的本地 mysql 连接

当应用程序在本地运行时,Node.js 能够连接到 MySQL 容器,但当应用程序在容器中运行时无法连接

无法在本地环境中使用 docker 连接到 cakephp 中的 mysql 数据库

无法通过套接字 '/var/mysql/mysql.sock' 连接到本地 MySQL 服务器 (38)