我正在尝试为我正在处理的项目创建OO登录系统,并且在将变量插入查询字符串时遇到问题。在下面的代码中,如果我将“$ TBL_NAME”替换为实际的表名,则可以使用。为什么$ TBL_NAME没有转化为$ TBL_NAME的价值?
class UserDB {
private $TBL_NAME = "users";
public static function CheckLogin($username, $password) {
Database::Connect();
$username = stripslashes($username);
$password = stripslashes($password);
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);
$sql="SELECT uid FROM $TBL_NAME WHERE username='$username' AND password='$password' ";
$result =mysql_query($sql);
$count=mysql_num_rows($result);
if ($count==1)
return true;
else
return false;
}
Query返回false。
答案 0 :(得分:2)
更多关于你的代码不起作用的原因:Php的OO语法要求你在实例和类变量上使用限定符。换句话说,你不能像其他语言一样遗漏“这个”。
如果您的CheckLogin方法不是静态的,则变量$TBL_NAME
仍然不会在函数内设置。要获取实例变量,您必须使用$this->TBL_NAME
。
由于您的方法 是静态的,因此它可以访问静态变量而不是实例变量,因此您必须将变量设置为static。完成后,您可以使用self::
访问它,就像Mo的回答一样。
答案 1 :(得分:-1)
将$TBL_NAME
声明为private static
,而不只是private
,并使用self::$TBL_NAME
。不确定字符串中的语法 - 我只是使用连接运算符(即"SELECT uid FROM " . self::$TBL_NAME . " WHERE …"