Как распечатать точный sql-запрос в zend framework?

У меня есть следующий фрагмент кода, который я взял из модели,

... $select = $this->_db->select() ->from($this->_name) ->where('shipping=?',$type) ->where('customer_id=?',$userid); echo $select; exit; // which gives exact mysql query. ..... 

Когда я использую запрос на обновление в zend,

 $up_value = array('billing'=> '0'); $this->update($up_value,'customer_id ='.$userid.' and address_id <> '.$data['address_Id']); 

Здесь я хочу знать точный mysql-запрос. Есть ли возможный способ печати запроса mysql в zend? доброжелательный совет

В Zend Framework объекты select имеют метод __toString ().

Из руководства Zend Framework:

 $select = $db->select() ->from('products'); $sql = $select->__toString(); echo "$sql\n"; // The output is the string: // SELECT * FROM "products" 

Альтернативным решением будет использование Zend_Db_Profiler. т.е.

 $db->getProfiler()->setEnabled(true); // your code $this->update($up_value,'customer_id ='.$userid.' and address_id <> '.$data['address_Id']); Zend_Debug::dump($db->getProfiler()->getLastQueryProfile()->getQuery()); Zend_Debug::dump($db->getProfiler()->getLastQueryProfile()->getQueryParams()); $db->getProfiler()->setEnabled(false); 

http://framework.zend.com/manual/en/zend.db.select.html

от> = 2,14

 echo $select->getSqlString() 

Я проехал сотни страниц, много гугл, но я не нашел никакого точного решения. Наконец это сработало для меня. Независимо от того, где вы находитесь в контроллере или модели. Этот код работал для меня везде. Просто используйте это

 //Before executing your query $db = Zend_Db_Table_Abstract::getDefaultAdapter(); $db->getProfiler()->setEnabled(true); $profiler = $db->getProfiler(); // Execute your any of database query here like select, update, insert //The code below must be after query execution $query = $profiler->getLastQueryProfile(); $params = $query->getQueryParams(); $querystr = $query->getQuery(); foreach ($params as $par) { $querystr = preg_replace('/\\?/', "'" . $par . "'", $querystr, 1); } echo $querystr; 

Наконец, эта вещь работала для меня.

Вы можете использовать Zend_Debug::Dump($select->assemble()); для получения запроса SQL.

Или вы можете включить профилировщик Zend DB FirePHP, который предоставит вам все запросы в аккуратном формате в Firebug (даже для операторов UPDATE).

EDIT : профилирование с помощью FirePHP также работает и в FF6.0 + (не только в FF3.0, как указано в ссылке)

вы можете распечатать ..

 print_r($select->assemble()); 

Теперь на Zend2:

 $select->getSqlString(); 

Отображение сгенерированного SQL из объекта ZendDbSql

Использовать это:-

 echo $select->query(); 

или

 Zend_Debug::dump($select->query(); 

Проверьте Zend_Db_Profiler . Это позволяет вам регистрировать любой оператор SQL по мере его подготовки и выполнения. Он работает для операторов UPDATE, а также для запросов SELECT.

 $statement = $this->sql->getSqlStringForSqlObject( HERE GOES Zend\Db\Sql\SelectSQL object ); echo "SQL statement: $statement"; 

Пример:

 $select = $this->sql->select(); ... $select->from(array( 'u' => 'users' )); $select->join(... $select->group('u.id'); ... $statement = $this->sql->getSqlStringForSqlObject($select); echo $statement; 

Я сделал это таким образом

 $sql = new Sql($this->adapter); $select = $sql->select(); $select->from('mock_paper'); $select->columns(array( 'is_section' )); $select->where(array('exam_id = ?' => $exam_id,'level_id = ?' => $level_id))->limit(1); $sqlstring = $sql->buildSqlString($select); echo $sqlstring; die(); 

еще короче:

 echo $select->__toString()."\n"; 

и более короче:

 echo $select .""; die; 
 $db->getProfiler()->setEnabled(true); // your code $this->update('table', $data, $where); Zend_Debug::dump($db->getProfiler()->getLastQueryProfile()->getQuery()); Zend_Debug::dump($db->getProfiler()->getLastQueryProfile()->getQueryParams()); $db->getProfiler()->setEnabled(false);