我的网站上有一个html表单,我正在尝试处理数据,然后将其存储在我服务器上的mysql数据库中。为了通过php安全地连接到mysql,我按照建议here将登录信息放在主webroot之外的配置文件中。
代码执行时代码无缝地执行:
<?php
$mysqli = mysqli_init( );
$mysqli->options(MYSQLI_READ_DEFAULT_FILE, "/this/is/the/filepath/to/my.cnf");
$mysqli->real_connect(NULL, NULL,'*********',NULL );
if (mysqli_connect_errno()) {
printf("Connect failed: ", mysqli_connect_error());
exit();
}
$email = $mysqli->real_escape_string($_POST['email']);
$mysqli->query("INSERT INTO subscribetest (email) VALUES ('$email')");
?>
但是当我取出密码时,就像这样:
<?php
$mysqli = mysqli_init( );
$mysqli->options(MYSQLI_READ_DEFAULT_FILE, "/this/is/the/filepath/to/my.cnf");
$mysqli->real_connect(NULL,NULL,NULL,NULL );
if (mysqli_connect_errno()) {
printf("Connect failed: ", mysqli_connect_error());
exit();
}
$email = $mysqli->real_escape_string($_POST['email']);
$mysqli->query("INSERT INTO subscribetest (email) VALUES ('$email')");
?>
代码崩溃,我收到错误消息:'警告:mysqli :: real_connect()。访问被拒绝'user'@'webaddress.net'(使用密码:否)'
为什么我的php脚本可以读取除配置文件中的密码之外的所有内容?它能够从配置文件中读取用户名,主机和数据库;密码是唯一被遗漏的密码。我到处寻找,花了几个小时,但我找不到任何解决方案。有没有其他人有这个问题?我该怎么办?
答案 0 :(得分:1)
documentation表示将real_connect()
中的密码参数设置为NULL
表示“用户不需要密码”。如果你没有任何参数调用它(它们都是可选的)吗?
答案 1 :(得分:0)
此错误似乎仍然存在:https://bugs.php.net/bug.php?id=43812
解决方法:
$iniData = file_get_contents('/etc/mysql/debian.cnf');
$iniData = preg_replace('/#.*$/m', '', $iniData);
$mysqlConfig = parse_ini_string($iniData, true);
$mysqli = new mysqli( $mysqlConfig['client']['host'], $mysqlConfig['client']['user'], $mysqlConfig['client']['password'] );
if ( $mysqli->connect_error ) {
die(sprintf("MySQL Connect Error: %s", $mysqli->connect_error));
}