0

我的网站上有一个 html 表单,我正在尝试处理数据,然后将其存储在我服务器上的 mysql 数据库中。为了通过 php 安全地连接到 mysql,我已按照此处的建议将登录信息放在主 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' 的访问被拒绝(使用密码:NO)'

为什么我的 php 脚本可以读取除了配置文件中的密码之外的所有内容?它能够从配置文件中读取用户名、主机和数据库;密码是唯一一个被遗漏的密码。我到处寻找,花了几个小时,但我一直无法找到任何解决方案。有没有其他人有这个问题?我能做些什么?

4

2 回答 2

1

文档说将密码参数设置为real_connect()意味着NULL“用户不需要密码”。如果您在没有任何参数的情况下调用它(它们都是可选的),它会起作用吗?

于 2012-09-03T07:52:17.843 回答
0

This bug still seems to exist: https://bugs.php.net/bug.php?id=43812

Workaround:

$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));
}
于 2016-11-17T15:33:03.743 回答