我犯了新的错误,在Windows中启动我的项目并将其迁移到Ubuntu。这一举动被强加给我,导致了很多意想不到的后果。它产生了许多致命的错误。
我知道只需执行var_dump就不会使对象为空。在var_dump里面,方法就在那里。所以我的问题是:为什么这在Windows环境中完美无缺,而不是在Linux环境中?我查看了代码并修复了我认为的所有大写问题。
生成错误的代码是:
public function find($user = null) {
if ($user) {
$field = (is_numeric($user)) ? 'id' : 'username';
$data = $this->_db->get('user', array($field, '=', $user));
var_dump($data);
if ($data->count()) {
$this->_data = $data->first();
return true;
}
}
内容
object(DB)#3 (6) { ["_pdo":"DB":private]=> object(PDO)#4 (0) { } ["_query":"DB":private]=> object(PDOStatement)#5 (1) { ["queryString"]=> string(31) "SELECT * FROM user WHERE id = ?" } ["_error":"DB":private]=> bool(false) ["_result":"DB":private]=> array(1) { [0]=> object(stdClass)#6 (8) { ["id"]=> string(2) "39" ["username"]=> string(8) "test1234" ["password"]=> string(64) "d1dcebd95402062c466eeb1e2b5e6c3b217a0fe160bc3baac86bafc9613494e9" ["salt"]=> string(32) ".JMs.ˆ~ìdÿ)7Ð §FKS¨Ê×$'å¹Yˆc¥" ["name"]=> string(0) "" ["joined"]=> string(10) "2014-11-20" ["disabled"]=> string(1) "0" ["email"]=> string(18) "jt125845@gmail.com" } } ["_count":"DB":private]=> int(1) ["error"]=> bool(false) }
return false;
}
同样,这是我的第一个项目。
答案 0 :(得分:0)
我会先将结果转换为数组,然后调用标准count
:
public function find($user = null) {
if ($user) {
$field = (is_numeric($user)) ? 'id' : 'username';
$result = $this->_db->get('user', array($field, '=', $user));
$data = $result->result_array();
var_dump($data);
if (count($data) > 0) {
$this->_data = $data[0];
return true;
}
}
关于问题的原因:版本之间可能存在差异。你切换操作系统不是问题,它有利于学习。
编辑:
显然我以前的想法是不够的,至少在它应该工作的环境中是这样。我现在没有可能测试它,所以我的新想法也可能是错的。我会分享它,希望最好:
public function find($user = null) {
if ($user) {
$field = (is_numeric($user)) ? 'id' : 'username';
$statement = $this->_db->prepare("select * from user where ".$field." = :userValue");
$statement->execute(array(':userValue' => $user));
if ($data = $statement->fetch()) {
$this->_data = $data;
return true;
}
}