【发布时间】:2014-09-24 22:19:49
【问题描述】:
好的,这是我的主要代码:
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:用户 'www-data'@'localhost' 的访问被拒绝(使用密码:否)
请注意,两个文本之间有空行,来自主代码中 echo() 的输出。
所以,我的问题是,为什么变量在 MySQLLoginInfo 对象中存储了正确的值,但是当我尝试访问它们时它们是空的?
任何帮助将不胜感激。
【问题讨论】:
-
另外,我应该注意。我对 PHP 很陌生,昨天开始学习它,但我以前有 Java 和 C# 的经验。所以,对菜鸟友好一点:)
标签: php variables object class-variables