用户访问被拒绝''@';localhost';(使用密码:NO)


Access denied for user ''@'localhost' (using password: NO)

尝试使用以下代码连接到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

为什么这不起作用?

这是因为您使用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));

示例取自PHP手册

当您尝试在没有有效连接对象的情况下执行查询时,将记录此警告。

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