У меня есть следующие два класса, называемые One и Two соответственно. В Class One есть база данных. Где метод connect()
возвращает переменную (свойство), которая является обработчиком базы данных ($dbh
). Я использовал connect()
буквально сотни раз, и он работает, как ожидалось. Здесь тоже (в методе query()
) должно работать корректно. Теперь работа, которую должен выполнить метод query()
, - это подготовить оператор (в данном случае $query
) и выполнить его, после чего он извлекает данные в виде ассоциативного массива и возвращает данные. Я вызываю этот метод несколькими методами, и он отлично работает во всех, кроме метода some_method()
в классе 2.
class One {
protected function query($sql, $params=[]){
$query = $this->connect()->prepare($sql); // Method connect() returns database handler ($dbh)
$query->execute($params);
$storage = $query->fetch(); // Fetch as an associative array
return $storage;
}
}
Теперь здесь, в some_method()
в классе 2, метод query()
(из класса One), вызывается там, где объявляются переменная $sql
, а также ассоциативный массив $params
, как показано в приведенном ниже коде. Все, что нужно сделать этому методу, - это вызвать метод query()
с параметрами $sql
и $params
и сохранить результат в $storage
. Если $storage==false
, return false
и если $storage
имеет значение, отличное от false
, return true
. И этот результат (т.е. истина или ложь) зависит от того, есть ли в базе данных запись в столбце class_date , как указано в $params['date']
. Теперь возникает проблема, независимо от того, имеет ли база данных это значение в этом столбце, метод some_method()
всегда возвращает false. Я не знаю, какую ошибку я здесь делаю. Кто-нибудь может указать на это, пожалуйста.
class Two extends class One{
public function some_method($date){
$sql = 'SELECT class_date FROM table_name WHERE id=:id AND class_date=:date';
$params = [
'id' => $this->user_id,
'date' => $date
];
$array = $this->query($sql, $params);
return ($array==false) ? false : true;
}
}