ColdFusionはもともとDBML(Database Markup Language)と呼ばれていたくらい、データベース処理によく利用されています。データベースへの接続情報(データソース)をColdFusion Administratorで登録すれば、あとは <cfquery>タグとSQLでデータベースに処理を投げられる手軽さも魅力となっています。
SQLのSELECTを実行して取得したクエリデータは、<cfquery name="">で指定した名前の変数に入れられます。それを画面に表示するには、HTMLのテーブルタグと組み合わせて<cfoutput query="変数の名前">〜</CFQUERY>を使うことが多いです。
(例:「ColdFusion入門」データベースから取得したデータを表の形で表示する)
取得するデータを調整(SQLのSELECT文を少しずつ変更)しながら作業をしていく時、あるいは適切なデータ(SELECT文の条件指定などが正しい)かを確認したい時は、<cfquery>で取得したデータや実行されたSELECT文をいち早く確認したいです。でも、下記のように<cfquery>だけを記述したページを実行しても、も(SQL文やデータベース接続に問題が無ければ)<cfquery>が実行されてページの処理が終了するため、画面には何も表示されません。
<cfquery datasource="cfartgallery" name="qArt"> SELECT * FROM ART WHERE ARTNAME Like '%a%' </cfquery>
まず、実行されたSELECT文の内容を確認する方法です。一番簡単なのは、ColdFusion のデバッグ表示機能を利用することです。ColdFusion Administrator にログインし、左側メニューの[デバッグとロギング] > 『デバッグ出力の設定』を押して、『リクエストのデバッグ出力の有効化』にチェックを入れます。また、『データベースアクティビティ』にチェックが入っている事も確認して下さい(デフォルトでチェックが入った状態です)。
デバッグ情報が有効な状態で、同じページをリクエストすると、画面にデバッグ情報が出てきます。
上記の「SQL Queries」の箇所に、実際に実行された SQL が表示されます。また、Time はデータベース処理時間、Recordsは取得されたレコード数(今回は22レコード)を確認することができます。
(※この方法では、実際にどのようなデータを取得したかまではわかりません)
別の方法としては、<cfquery>のResult属性を使い、クエリー結果に関する情報を取得して実行されたSQLを出力する方法です。
<cfquery datasource="cfartgallery" name="qArt" result="stQuery"> SELECT * FROM ART WHERE ARTNAME Like '%a%' </cfquery> <cfoutput>#stQuery.SQL#</cfoutput>
上記のresult="stQuery"は構造体のデータが保存されます。構造体のキーの一つにSQLがあり、そのSQLを画面に出力して確認しています。
(構造体に格納されている値についてはこちらを確認して下さい)
データベースから取得したデータも確認したい場合には、<cfdump>を使いましょう。
<cfquery datasource="cfartgallery" name="qArt"> SELECT * FROM ART WHERE ARTNAME Like '%a%' </cfquery> <cfdump var="#qArt#">
<cfdump>タグを使用すると、ColdFusion オブジェクトの要素、変数、値をデバッグ表示できます。<cfdump>はデバッグを目的としたタグですので、開発時は役に立ちますが、本番では使用しないようにしましょう。
<cfdump>は、クエリ変数(クエリオブジェクト)の中の情報を見るのに最適ですが、プログラムの中に<cfdump>タグを記述して、画面上に確認していく必要がありますし、確認が終わったら<cfdump>タグを消さないといけない点でも注意が必要です。
それに対して、デバッグ情報の表示は、取得したデータの確認はできないもののプログラムの修正を行わなくて良い点で優れています(デバッグ情報を表示するIPアドレスが正しく制限されていないと、別の人に見られてしまうかもしれないのでその点は気をつけて下さい)
このページでは触れていませんが、ColdFusion Builder をお持ちであれば、で「デバッガ」の機能を利用して Builder上で取得したデータやSQLを確認することもできますので、方法の一つとして検討してもらえればと思います。
(「デバッガ」の機能は別のトピックで紹介する予定です)
今回の件に限らず、ColdFusionでデバッグを目的に<cfdump>タグを記述したりファイルにデバッグデータを出力したりする場合は、戻し忘れに注意しましょう。