gpt4 book ai didi

php - 用户 '' @'localhost' 的访问被拒绝(使用密码 : NO) when using PHP+MySQL in openshift

转载 作者:行者123 更新时间:2023-11-29 07:22:01 26 4
gpt4 key购买 nike

我已将我的 Web 应用程序上传到 OpenShift。我的应用程序使用 PHP 和 MySQL Cartridge。

我使用 PHPmyAdmin 创建了一些数据库(通过 openshift Web 界面)。显然,每个数据库都有自己唯一的名称。在我的 PHP 代码中,我以这种方式初始化与我的 MySQL 数据库之一的连接:

$mysql_database=<some data base>;

$connection = mysqli_connect(getenv('OPENSHIFT_MYSQL_DB_HOST'), getenv('OPENSHIFT_MYSQL_DB_USERNAME'), getenv('OPENSHIFT_MYSQL_DB_PASSWORD'), "$mysql_database", getenv('OPENSHIFT_MYSQL_DB_PORT')) or die("Error: " . mysqli_error($connection));
mysql_set_charset("utf8", $connection);

然后,我在其他地方从我的 PHP 代码(如 select 、 update 等)对我连接的数据库内的表进行一些查询。例如:

$query_run=mysql_query("SELECT * from `$some_table` WHERE `id`='$id'")

连接本身不会在任何情况下失败,但是我的所有查询都会失败:

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

当我在实际机器上手动发出这些命令时,一切运行正常。所以这有效:使用 PuTTy SSHing 进入我的机器,然后执行以下操作:

   mysql -u $OPENSHIFT_MYSQL_DB_USERNAME -h $OPENSHIFT_MYSQL_DB_HOST -P $OPENSHIFT_MYSQL_DB_PORT -p <some data base>  

mysql>SELECT * from `<some table>` WHERE `id`='<some id>'

我没有修改任何安全设置,也没有更改为我的 MySQL 操作生成的用户名/密码。

而且,在 xampp Apache+MySQL 服务器上运行的本地应用程序上,一切都运行得很好。

有什么想法吗?

最佳答案

你不应该像那样使用 mysql_query() (参见 Is this query safe from sql injection? )

您可以使用更好的抽象:PHP 数据对象 (PDO) 。例如

try {
// Set your connection variables
$host = getenv('OPENSHIFT_MYSQL_DB_HOST');
$port = getenv('OPENSHIFT_MYSQL_DB_PORT');
$username = getenv('OPENSHIFT_MYSQL_DB_USERNAME');
$password = getenv('OPENSHIFT_MYSQL_DB_PASSWORD');
$dbname = 'database_name';

// Create the connection string
$conn_str = "mysql:host=$host;port=$port;dbname=$dbname"
// And create a db handler with PDO
$dbh = new PDO($conn_str, $username, $password);
// Prepare whatever statement, could also be SELECT etc
$stmt = $dbh->prepare("INSERT INTO TABLE_NAME (name, value) VALUES (?, ?)");
// Binding parameters like this prevents SQL Injection
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $value);

// Assign values to the variables
$name = 'Random';
$value = 1;

// Finally, execute the statement
$stmt->execute();
}
catch(PDOException $e) {
// Print out whatever error we got
echo $e->getMessage();
}

// Don't forget to close the connection
$dbh = null

这不仅是使用 PHP 处理 MySQL 数据库的更好解决方案,而且希望它还能解决您的身份验证问题(或至少使它们更易于调试)。

关于php - 用户 '' @'localhost' 的访问被拒绝(使用密码 : NO) when using PHP+MySQL in openshift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35800799/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com