Не понимаю, почему это не сработает. Это может быть ошибка в конкретном выпуске ZF, но, насколько я могу судить, нет ошибок синтаксиса SQL. То, что вы могли бы сделать, - это запустить класс Zend_Db в вашей системе, как в файле index.php, так же, как вы делали это в классе DatabaseService:
$dbConfig = array(
'host' => 'hostname',
'username' => 'username',
'password' => 'password',
'dbname' => 'dbname'
);
$db = Zend_Db::factory('mysqli', $dbConfig);
$db->setFetchMode(Zend_Db::FETCH_OBJ);
Zend_Db_Table::setDefaultAdapter($db);
И тогда Zend Framework должен обработать процесс подключения для вас. Затем вместо того, чтобы иметь класс DatabaseService, вы просто создаете модель для каждой таблицы, которая вам нужна, например:
<?php
class EndPoints extends Zend_Db_Table_Abstract
{
protected $_name = 'EndPoints';
/**
* the default is 'id'. So if your table's primary key field name is 'id' you
* will not be required to set this. If your primary key is something like
* 'EndPointsID' you MUST set this.
* @var primary key field name
*/
protected $_primary = 'EndPointsID';
}
Выполнение этого автоматически предоставит вам доступ к таким функциям, как fetchRow (), fetchAll (), find () и т. Д. Затем вы также можете использовать Zend_Db_Table_Select для ваших запросов, что может быть весьма полезно. Вот так:
<?php
$endPointsModel = new EndPoints();
$callIdCount = $endPointsModel->getCallIdCount('2010-04-21 00:00:01', '2010-04-21 00:00:01');
Тогда в вашей модели EndPoints вы бы создали эту функцию следующим образом:
...
public function getCallIdCount($fromDate, $toDate)
{
$cols = array('cnt' => 'count(*)');
$select = $this->select->setIntegrityCheck(false) // this is crucial
->from($this->_name, $cols)
->join('CallID', "{$this->_name}.CallID = CallID.CallID", array())
->where("{$this->_name}.LastRegister >= ?", $fromDate)
->where("{$this->_name}.LastRegister <= ?", $toDate);
// if you need to see what the whole query will look like you can do this:
// echo $select->__toString();
return $this->fetchAll($select);
{