Я сделал ошибку новобранец, начав свой проект в окнах и переведя его на unbuntu. Этот шаг был навязан мне и привел к множеству непредвиденных последствий. Это вызвало множество ошибок, когда один из них был фатальным.
Я знаю, что объект не является нулевым, просто делая var_dump.Inside 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) "[email protected]" } } ["_count":"DB":private]=> int(1) ["error"]=> bool(false) }
return false;
}
Опять же, это мой первый проект.
Сначала я преобразовал результат в массив, а затем вызовет стандартный 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;
}
}
$data
записана с использованием той же кодировки charset (или просто скопируйте ее из строки выше в место сcount()
). Или перепечатайте это. PHP позволяет микшировать кодировки в именах переменных (например , буквыa
из ASCII и любого другого набора Unicode) и создает другие переменный.