У меня есть разработанное использование проекта cakephp, который получает данные из другого DBS, но если одна из базы данных тезисов некоторые страницы не открывает и дает мне следующую ошибку:
Таблица базы данных tablenae для модели moedlname не была найдена.
.. и у меня есть на этой странице другие данные, отображенные от другой базы данных, которые работают, вероятно.
как я могу определить, использует ли база данных офлайн пирог, и я могу сделать эту модель прочитанной из другого места как файл кэша, пока база данных не запускается снова.
Возможно, лучший подход - кэшировать результаты и читать из кеша, обращаясь к базе данных только при необходимости ...
<?php
$cacheKey = 'myCacheNumber1';
if (($data = Cache::read($cacheKey)) === false) {
$data = $this->Model->find('all');
if ($data) {
Cache::write($cacheKey, $data);
}
}
?>
Проблема в том, что предполагается, что модель и соединение с базой данных доступны в то время, когда кеш не работает. 'не существует (или срок его действия истек), и если бы это было не так, вы все равно получали бы те же ошибки, но частота, безусловно, уменьшилась бы.
Я думаю, чтобы проверить, доступна ли БД вообще, потребовались бы некоторые хитрости в коде, поскольку основной метод подключения предполагает успех и сильно терпит неудачу, когда недоступен. Я бы, вероятно, сделал компонент со стандартными методами подключения PHP, чтобы контролировать, если вы попытаетесь загрузить модель.
<?php
$cacheKey = 'myCacheNumber1';
if (($data = Cache::read($cacheKey)) === false) {
if ($this->DbTest->check('hostname','username','password')) {
$data = $this->Model->find('all');
if ($data) {
Cache::write($cacheKey, $data);
}
}
}
?>
<?php
// app/controllers/components/db_test.php
class DbTestComponent extends Object {
function check($hostname,$username,$password) {
$result = true;
$link = @mysql_connect($hostname,$username,$password);
if (!$link) {
$result = false;
}
@mysql_close($link);
return $result;
}
}
?>