PHP mySQL查询和PHP变量
我正在尝试为我正在处理的项目制作OO登录系统,并且无法将变量插入查询字符串。在下面的代码中,如果将“$ TBL_NAME”替换为它的实际表名称。为什么$ TBL_NAME没有转化为$ TBL_NAME的价值?PHP mySQL查询和PHP变量
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;
}
查询返回false。
声明$TBL_NAME
为private static
,而不仅仅是private
,并使用self::$TBL_NAME
。不确定字符串中的语法 - 我只是使用连接运算符来代替(即,"SELECT uid FROM " . self::$TBL_NAME . " WHERE …"
此外,如果'get_magic_quotes_gpc()'为'true',并且该值来自'$ _GET','$ _POST','$ _COOKIE'或'$ _REQUEST',那么您应该只使用'stripslashes' - 这样做在你的数据库类中是可怕的泄漏抽象。 – 2010-05-29 19:13:06
还要注意,如果'$ result'不是有效的结果资源,'mysql_num_rows()'会发出警告。另外,你永远不应该以明文存储密码!检索行,并使用存储的密码作为提供散列函数的哈希函数(将散列操作的结果与存储的密码进行比较,如果匹配,则返回'true'),请参阅'crypt()') – 2010-05-29 19:14:35
更多关于您的代码不起作用的原因:Php的OO语法要求您使用如果你的CheckLogin方法不是静态的,变量$TBL_NAME
仍然不会被设置在函数内部。如果你的CheckLogin方法不是静态的,变量$TBL_NAME
仍然不会被设置在函数内部。要获得实例变量,您必须使用$this->TBL_NAME
。
由于您的方法是静态,它有s访问静态变量而不是实例变量,所以你必须使变量静态。一旦你这样做了,你可以用self::
来访问它,就像Mo的回答一样。
你总是可以做“echo $ sql;”看看你在建什么。 :)但你知道这一点。 – 2010-05-29 19:28:48
甚至没有想到这一点,谢谢,我觉得自己像一个白痴:) – user48202 2010-05-29 20:32:31
你花了一个错误的地方调用Database :: Connect();和stripslashes – 2010-05-30 09:10:26