3

エラーが発生したときに、最初の数文字だけではなく、生成された SQL ステートメント全体を表示するスタック トレースを作成する方法はありますか?

これは現在表示されているものです

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

..そして、データベースに送信される前に update ステートメント全体を表示して、何が問題なのかを追跡したいと思います。

助けてくれてありがとう。SWK

4

2 に答える 2

12

完全な 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 ステートメントを表示する最良の方法は、データベース接続でプロファイリング機能を使用することだと思います。これはロギング機能との組み合わせであり、Firefox 用の firePHP アドオンは私のお気に入りの設定です。

Zend Framework の MVC 構成を使用する場合、これは次のコード行で行われます。

// 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 の要件) は、次の Web サイトにあります: Firebug

FirePHP アドオンは、次の Web サイトにあります: FirePHP

イヴォ・トロンパート

于 2008-12-01T20:35:11.463 に答える
3

プロファイラーはVクールですが、システムが例外をスローした場合のデバッグには役立ちません。

完全なSQLを含むより詳細なスタックトレースの提供に関するこの投稿を確認してください

明らかな理由で開発環境でのみ使用する

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

于 2009-04-30T14:55:12.810 に答える