このコードを保護しようとしていますが、cfqueryparam タグを追加するたびに、パラメーター バインディングに関するエラーが発生します。cfsqltype
属性を正しい値に設定していると確信しています。最後の select ステートメントは、すべての地獄が解き放たれる場所です。
<CFQUERY name="getLatestSurveyID" datasource="#REQUEST.dsn#">
SELECT TOP 1
SurveyID
FROM
TUser_WelcomeHome
ORDER BY
SurveyID DESC
</CFQUERY>
<!--- Throw the Reasons/Subreasons into the DB --->
<!---adding cfqueryparam tags breaks following CFIF block--->
<CFIF ListLen(SESSION.WHSurveyStruct.reasonString, ";") gt 0>
<CFQUERY name="insertReasons" datasource="#REQUEST.dsn#">
INSERT INTO TWelcomeHome_Reason
(ReasonID, SubReasonID, SurveyID)
SELECT #sanitize(ListFirst(SESSION.WHSurveyStruct.reasonString, ";"))#, #sanitize(getLatestSurveyID.SurveyID)# <!---error occures if adding cfqueryparam tags on this line--->
<CFLOOP list="#sanitize(ListRest(SESSION.WHSurveyStruct.reasonString, ';'))#" index="thisReason" delimiters=";">
UNION ALL
SELECT #sanitize(thisReason)#, #sanitize(getLatestSurveyID.SurveyID)#
</CFLOOP>
</CFQUERY>
上記のコードは機能しますが、次の変更を行った場合は機能しません。
<cfqueryparam value=#sanitize(getLatestSurveyID.SurveyID)# cfsqltype="cf_sql_integer">
パラメータ化によって引き起こされるエラーは次のとおりです
<cfqueryparam value=#sanitize(getLatestSurveyID.SurveyID)# cfsqltype="cf_sql_integer">
データベース クエリの実行中にエラーが発生しました。[Macromedia][SQLServer JDBC Driver][SQLServer]INSERT ステートメントが FOREIGN KEY 制約「FK_WelcomeHome_TSupplier」と競合しました。データベース「d21wca1」、テーブル「dbo.TSupplier」、列「SupplierID」で競合が発生しました。D:/Resource/www/dev/ww1test.owktravel.com/welcome_survey/welcome_survey_router.cfm でエラーが発生しました: 行 215 D:/Resource/www/dev/ww1test.owktravel.com/welcome_survey/welcome_survey_router.cfm から呼び出されます: 183 行目 D:/Resource/www/dev/ww1test.owktravel.com/welcome_survey/welcome_survey_router.cfm から呼び出されます: 174 行目 D:/Resource/www/dev/ww1test.owktravel.com/welcome_survey/welcome_survey_router.cfm から呼び出されます: 1 行目 D:/Resource/www/dev/ww1test.owktravel.com/welcome_survey/welcome_survey_router.cfm から呼び出されます:
編集:ループが何をしているのかを理解するのにまだ問題があります。SELECT
ステートメントが欠落していませFROM
んか?