好的,这是我的主要代码:
require "checkpassword.php";
require "mysqllogininfo.php";
# Validate password
if (!validatePassword($_GET["password"])) {
return;
}
# Get variables
$uuid = $_GET["uuid"];
if (preg_match('/^\d+$/',$_GET["rank"]) == false) {
die("Rank must be integer");
}
$rank = $_GET["rank"];
# Validate UUID
if ($uuid == null) {
die ("Supply uuid");
}
# Validate rank
if ($rank == null) {
die ("Supply rank");
} else if ($rank < 0 || $rank > 6) {
die ("Invalid rank");
}
# Load MySQL login info
$loginInfo = new MySQLLoginInfo("/var/uniqraft/mysqllogin");
# Debug
# All this displays as just 3 empty lines, so I assume the variables are null <--
echo($loginInfo->host);
echo "<br>";
echo($loginInfo->username);
echo "<br>";
echo($loginInfo->password);
echo "<br>";
echo($loginInfo->dbname);
# Create connection
$connection = mysqli_connect($loginInfo->host, $loginInfo->username, $loginInfo->password, $loginInfo->dbname);
# Check connection
if (mysqli_connect_errno()) {
die ("Failed to connect to MySQL: " . mysqli_connect_error());
}
正如您所看到的,我尝试访问MySQLLoginInfo对象中的变量host,username,password和dbname,但它们都显示为null。
然而,我并不认为它们实际上是空的。因为,如果我们看看MySQLLoginInfo对象,我们可以看到我添加了一些调试echo()来显示变量,我们发现它们实际上不是空的。
class MySQLLoginInfo
{
# Properties
public $host;
public $username;
public $password;
public $dbname;
# Constructor
function __construct($infoLocation) {
$handle = fopen($infoLocation, "r", false) or die("Couldn't open $infoLocation");
$i = 0;
# Loop through lines
while (($line = fgets($handle)) !== false) {
if ($i === 0)
$host = $line;
else if ($i === 1)
$username = $line;
else if ($i === 2)
$password = $line;
else if ($i === 3)
$dbname = $line;
else
break; # Read at max 4 lines
$i++;
}
if ($i < 3) {
die($infoLocation . " doesn't contain at least 4 lines");
}
# These all display the proper values, indicating that they are not null <--
echo $host;
echo $username;
echo $password;
echo $dbname;
}
}
最终输出如下:
localhost mcserver secret_password uniqraft_core
无法连接到MySQL:访问被拒绝用户&#39; www-data&#39; @&#39; localhost&#39; (使用密码:否)
请注意,2个文本之间有空行,来自主代码中echo()的输出。
所以,我的问题是,为什么变量存储在MySQLLoginInfo对象中的适当值,但是当我尝试访问它们时它们是空的?
非常感谢任何帮助。
答案 0 :(得分:1)
你的MySQLLoginInfo
构造函数中没有实际设置类变量,只有本地函数变量:
#Loop through lines
while (($line = fgets($handle)) !== false) {
if ($i === 0)
$this->host = $line; // vs $host = $line;
// ...
}
我建议您参考Class Properties上的文档:
在类方法中,可以使用
->
访问非静态属性 (对象运算符):$this->property
(其中property是。的名称 属性)。使用::(Double)访问静态属性 科隆):self::$property
。有关详细信息,请参阅静态关键字 静态和非静态属性之间的区别。