Zend с Oracle: Запросы не работают должным образом
Я очень новичок в zend framework, и у меня есть проект для него с Oracle в качестве базы данных. После стольких трудностей я смог настроить zend, а затем подключить его к бд.
Итак, это вступление; итак, давайте перейдем к реальной проблеме. Все будет хорошо, если... если...
Я могу выполнять запросы, используя методы абстрактного класса. Я использую модели гостевой книги, картографы в качестве базы и размещаю свои модели так же, как они были настроены. Поначалу я не мог знать, могу ли я был подключен к бд или нет. Так что для этого я использовал: oci_connect();
.
Это помогло мне узнать, что я действительно подключен к базе данных oracle. Но это только для проверки. Затем я использовал Zend_Db::factory(...options...).
, Он тоже отлично работал, используя методы $db->fetchAssoc()
и т. Д. Но это тоже не мое требование, так как я не хочу писать жестко закодированные запросы. Я хочу выполнять запросы, выполняемые либо с помощью:
$db = Zend_Db::factory($config->database);
$select = $db->select()->from('clients');
$stmt = $select->query();$result = $stmt->fetchAll();echo "<pre>";print_r($sql);echo "</pre>";die;
ИЛИ, используя внутренние методы абстрактного класса, такие как: $ResultSet = $this->getdbtable()->Выборка(); Выборка()
Последний 2 упомянутых способа не являются извлечением данных... и я совершенно не знаю, где найти решение для этих двух способов.
Сведения о файле Application.ini:
resources.db.adapter = "oracle"
resources.db.params.dbname = "//11.11.11.11/RAC"
resources.db.params.username = "abc"
resources.db.params.password = "abc"
1 answers
Хорошо, я возьму это на себя.
Установите настройки application.ini, Примечания к адаптеру Oracle:
resources.db.adapter = "oracle" or "PDO_Oci"
resources.db.params.dbname = "//11.11.11.11/RAC"
resources.db.params.username = "abc"
resources.db.params.password = "abc"
//if you are only using one DB go ahead and set default adpter to true.
resources.db.isDefaultTableAdapter = true
Настройка классов DbTable
<?php
class Application_Model_DbTable_Member extends Zend_Db_Table_Abstract
{
//name of dtabase table
protected $_name = 'member';
//name of column with primary key
protected $_primary = 'memberid';
//primary key auto-increment? True for yes false for natural key
protected $_sequence = FAlSE;
В ваших классах DBTABLE или классах, которые являются их дочерними, у вас будет доступ к методам Zend_Db_Table_Abstract. Я знаю, что в настоящее время вы используете картографы, но информация может пригодиться и предоставляет простые демонстрации, так как адаптер БД по умолчанию уже доступен.
//I like the select() method when querying against a table because select() provides
//automatic quoting of most values. select() can be used to built fairly complex queries.
//This method will either fetchAll() in the table or fetchRow or Rowset against provided values
public function fetchAllMember($column = NULL, $value = NULL) {
$select = $this->select();
if ($column != NULL) {
$select->where($column . '= ?', $value);
}
$result = $this->fetchAll($select);
return $result;
}
Если вы не используете выберите() вы можете использовать методы quoteinto(), quote() или qouteIdentifier(). Для этого требуется ссылка на адаптер бд.
public function deleteMember($memberId) {
//reference the available adapter and quote the values into the sql statement
$where = $this->getAdapter()->quoteInto('memberid = ?', $memberId);
$this->delete($where);
}
Он также работает без адаптера, если не используются методы цитирования.
public function addMember(array $memberData) {
$data = array(
//array of data
);
$this->insert($data);
}
Когда доступны абстрактные методы, также доступны методы table_row, и мой любимый из них - метод save(), который работает как метод вставки и обновления в одной строке.
public function saveAlbum(array $data) {
//I like to use object notation when possible
$dataObject = (object) $data;
//create row
$row = $this->createRow();
//if id is present as array key the row will be updated
if (array_key_exists('id', $data)) {
$row->id = $dataObject->id;
}
//else a new id will be assigned and a new row created
$row->name = $dataObject->name;
$row->artist_id = $dataObject->artist_id;
$row->year = $dataObject->year;
//insert or update row
$row->save();
// return the row of data
return $row;
}
При работе вне классов расширенная аннотация доступ к бд немного отличается.
//in controller or models or other classes the default adapter is easily available.
$db = Zend_Db_Table_Abstract::getDefaultAdapter();
При наличии адаптера вы можете использовать Zend_Db_Select() или zend_db_statement() для построения и выполнения запросов.
//Zend_Db_Statement()
$stmt = $db->query('SELECT * FROM bugs');
$rows = $stmt->fetchAll();
//Zend_Db_Select()
$select = $db->select()
->from('products');
$stmt = $db->query($select);
$result = $stmt->fetchAll();
Это ни в коем случае не является исчерпывающим, но дает высокую оценку Zend_Db. Я надеюсь, что это поможет