трассировка стека Zend Framework - PullRequest
3 голосов
/ 01 декабря 2008

Есть ли способ сделать трассировку стека для отображения всего сгенерированного оператора SQL, когда вместо ошибки есть только первые несколько символов?

Это то, что отображается в данный момент

... \ Zend \ Db \ Adapter \ Pdo \ Abstract.php (220): Zend_Db_Adapter_Abstract-> query ('UPDATE' diction ... ', Array)

.. и я хотел бы увидеть весь оператор обновления перед отправкой в ​​базу данных, чтобы отследить, что с ним не так.

Спасибо за помощь. SWK

Ответы [ 2 ]

12 голосов
/ 01 декабря 2008

Если вы хотите просмотреть полный SQL-оператор, вы можете использовать Zend_Debug. Например, если ваш оператор SQL находится в переменной $ select и вы хотите просмотреть полный оператор SQL, вы можете использовать следующую строку кода:

Zend_Debug::Dump($select);
exit;

Или, если ваш код создан с помощью класса Zend_Db_Table, вы можете использовать:

$select = new Zend_Db_Select(Zend_Registry::get('db'));
$select->from('string');
Zend_Debug::Dump($select->assemble());
exit;

Я думаю, что лучший способ просмотреть оператор sql - использовать функцию профилирования для соединения с базой данных. Это комбинация с функцией регистрации и надстройка firePHP для Firefox - моя любимая настройка.

Если вы используете конфигурацию MVC Zend Framework, это делается белым цветом в следующих строках кода:

// setup the database connection
$db = Zend_Db::factory(Zend_Registry::get('config')->database->adapter,Zend_Registry::get('config')->database->params);

// create a new profiler
profiler = new Zend_Db_Profiler_Firebug('All DB Queries');

// enable profiling (this is only recommended in development mode, disable this in production mode)
$profiler->setEnabled(true);
// add the profiler to the database object
$db->setProfiler($profiler);

// setup the default adapter to use for database communication
Zend_Db_Table_Abstract::setDefaultAdapter($db);

// register the database object to access it in other parts of the project
Zend_Registry::set('db',$db);

/**
*
* This part is optional
*
* You can use this logger to log debug information to the firephp add-on for Firefox
* This is handy for debugging but must be disabled in production mode
*
*/

// create logger
$logger = new Zend_Log();

// create firebug writer
$firebug_writer = new Zend_Log_Writer_Firebug();

// add writer to logger
$logger->addWriter($firebug_writer);

// register the logger object to access it in other parts of the project
Zend_Registry::set('log',$logger);

Дополнение к firebug (требование для firephp) можно найти на этом сайте: Firebug

Дополнение FirePHP можно найти на этом сайте: FirePHP

Иво Тромперт

3 голосов
/ 30 апреля 2009

, хотя профилировщик V крутой - он не помогает при отладке, когда система выдает исключение ..

ознакомьтесь с этой статьей о более подробной трассировке стека с полным SQL

ТОЛЬКО ДЛЯ ИСПОЛЬЗОВАНИЯ В СРЕДАХ DEV по очевидным причинам

http://www.edmondscommerce.co.uk/blog/zend-framework/zend-framework-more-detailed-stack-trace/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...