【问题标题】:Access denied for user ''@'localhost' (using password: NO) [duplicate]用户''@'localhost'的访问被拒绝(使用密码:否)[重复]
【发布时间】:2013-02-07 12:44:26
【问题描述】:

尝试使用以下代码连接到 localhost sql db(此时未对查询进行任何操作,只希望执行查询):

<?php

$host     = "localhost";
$port     = 3306;
$socket   = "";
$user     = "root";
$password = "Password1";
$dbname   = "CIIP_WIKI";

$con = new mysqli($host, $user, $password, $dbname, $port);

if(!$con)
{
echo ("db connection failed!");
die ('Could not connect to the database server' . mysqli_connect_error());
}

else {
    echo ("db connection established.");
    echo ("<br/>");
    }

$query = sprintf("SELECT first_name FROM actor WHERE actor_id='1'");

$result = mysql_query($query);

$con->close();

?>

我不断收到以下信息...

Welcome

db connection established.

Warning: mysql_query(): Access denied for user ''@'localhost' (using password: NO) in C:\Program Files (x86)\EasyPHP-12.1\www\Cisco Wiki\index.php on line 31

Warning: mysql_query(): A link to the server could not be established in C:\Program Files (x86)\EasyPHP-12.1\www\Cisco Wiki\index.php on line 31

为什么这不起作用?

【问题讨论】:

  • 你混淆了mysql和mysqli。使用一个 API。
  • mysql_*和mysqli是两个不同的API

标签: php mysql


【解决方案1】:

这是因为您使用mysqli_ 创建连接,然后使用mysql_ 尝试获取结果。它们是不同的 API。

<?php

/* You should enable error reporting for mysqli before attempting to make a connection */
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

$mysqli = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db');

/* Set the desired charset after establishing a connection */
mysqli_set_charset($mysqli, 'utf8mb4');

printf("Success... %s\n", mysqli_get_host_info($mysqli));

Example taken from the PHP manual

【讨论】:

    【解决方案2】:

    只要您尝试在没有可用的有效连接对象的情况下执行查询,就会记录此警告。

    在您的情况下,您认为您有一个有效的连接对象可用,但是您在使用 mysql 执行查询时使用 mysqli 创建了它。这是两个不同的 API,因此 mysql_query 函数正在寻找一个 mysql 连接对象但没有找到。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-29
      • 2015-10-07
      • 2018-02-22
      • 2016-12-27
      • 2012-06-17
      • 2019-12-19
      • 2017-10-26
      相关资源
      最近更新 更多