我有以下脚本:
function canLogin($mail, $password) {
if( isset($mail, $password) ) {
$login = dbFind('users', array("mail" => (string)"$mail", "pass" => (string)"$password"), true);
var_dump($login);
if($login)
{ return (string)$login['_id']; }
else { return false; }
} else { return false; }
}
dbFind函数如下:
function dbFind($collIn, $obj, $one = false) {
global $db;
$collection = $db->$collIn;
if($one == true)
return $collection->findOne($obj);
else return $collection->find($obj);
}
现在,您可以从第一段代码中注意到,我使用var_dump查看$ login变量的内容,然后检查它是否已设置。
当我有正确的登录时,var_dump从db返回正确的对象,否则返回NULL。问题是在var_dump之后的if语句中总是返回false!
我缺少什么?提前谢谢。
答案 0 :(得分:0)
If (isset($login)){
//do what you need
}
答案 1 :(得分:0)
if($login != NULL){
return (string)$login['_id'];
}else{
return false;
}
我遇到了这样一个问题,这个问题很有效,而且它正在发挥作用。
答案 2 :(得分:0)
尝试将if
语句更改为:
if (is_array($login) && array_key_exists('_id', $login) && $login['_id'] instanceof MongoId)
{
//the array_key_exists check could be omitted, but is there just in case
return (string) $login['_id'];
}
您可以省略前两个检查并使用!empty($login['_id']) && $login['_id'] instanceof MongoId
,但可能会发出警告(不确定)。
顺便说一句:尝试将您的ini文件设置为{{1也许这会给你一些关于出了什么问题的线索。
根据您在评论中发布的内容以及查看代码,此行:E_STRICT | E_ALL
实际上是将对象转换为字符串。结果如下:
return (string)$login['_id'];
你正在使用array(5) { ["_id"]=> object(MongoId)#8 (1) //<-- OBJECT
{ ["$id"]=> string(24) "50d19fed9cc2318521000001" }
}
演员,感觉不对正如Sammaye所指出的,那应该是正常的。你投了太多BTW:(string)
将"$foo"
投射到一个字符串,因为双引号,不需要额外的演员......但这不是重点...无论如何,试试这个:
$foo
有关方法/属性和头痛的更多详细信息,请参阅mongoid class上的文档......
PS:使用getter方法可能更干净:
return $login['id']->{'$id'};//need the single quotes, the property NAME is $id, not id
祝你好运,快乐编码