PHP 以 Apache 用户而非指定用户身份连接到 MySQL

PHP connecting to MySQL as Apache user instead of specified user

我正在尝试使用 PHP 连接到 MYSQL 数据库。我有这个连接到数据库:

<?php
$servername = "localhost";
$username = "orbital";
$password = "XXXXXXXX";
$dbname = "helios";

function establishConnection() {
    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);

    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }

    return $conn;
}?>

但是,每当我调用 establishConnection() 时,我都会得到:

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

webmaster 是我运行 Apache 的计算机上的用户。为什么它使用没有密码的网站管理员用户而不是指定的 'orbital' 用户?

这些变量超出了函数的范围。您应该将这些变量作为函数的参数:

function establishConnection($servername, $username, $password, $dbname) {
    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);

    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }

    return $conn;
}
$myCon = establishConnection($servername, $username, $password, $dbname);

或:

你可以在函数中声明它们为全局变量(如下),尽管很多人反对(见评论):

<?php
$servername = "localhost";
$username = "orbital";
$password = "XXXXXXXX";
$dbname = "helios";

function establishConnection() {
    // Create connection
    //without the following line, this function has no access to any
    // of these variables because they are outside the function scope
    global $servername, $username, $password, $dbname;
    $conn = new mysqli($servername, $username, $password, $dbname);

    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }

    return $conn;
}?>

您需要将数据库变量传递给函数。不要使用 global 关键字;将它们作为参数传递。

<?php
$servername = "localhost";
$username = "orbital";
$password = "XXXXXXXX";
$dbname = "helios";

function establishConnection($servername, $username, $password, $dbname) {
    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);

    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }

    return $conn;
}?>