2009-08-21 6 views
0

私は、プロジェクトごとにテーブルの名前を変更できるサブシステムを作成しています。DAO.cfcの動的tablename?

私のサブシステムのユーザに&を検索する代わりに、この機能を使用するのですか?

<cfquery name="local.foo" datasource="#dsn#"> 
    SELECT col1, col2, col3 
    FROM #tableName# 
</cfquery> 

<cfqueryparam>を指定しないと、キャッシュ不可能になりますか?その他の問題? (SQLインジェクションは問題ではないと仮定します)

テーブル名には<cfqueryparam>を使用できないと思いますか?

ありがとうございました。

+1

"これは機能しますか?"なぜあなたはそれを試してみませんでしたか? 「テーブル名にを使用することはできません。再び.. – erikvold

+0

*テーブル名にを使用する*これは古いスレッドであることは分かっていますが、今後そのスレッドに出くわす人にとっては答えはノーです。 Cfqueryparam、またはバインド変数は、リテラル、つまり単純な文字列、数値などでの​​み動作します。 Cfqueryparamはテーブル名(または他の*オブジェクト名)では使用できません。 – Leigh

答えて

3

これはうまくいくはずです。 CFはすべての変数を値に変換し、その文字列をデータベースドライバに送信します。

非常に注意してください。あなたが暗示しているように、これはいくつかの厄介なSQLインジェクションのためにあなたを設定する可能性があります。

+1

MySQLを使用している場合は、 '#tableName#'などのバッククォートで文字列をラップすることで、SQLを安全にするためにtableNameをエスケープできます。他のデータベースには、テーブル名とカラム名をエスケープする独自の方法があります。 – sqrl0