Iva*_*van 0 coldfusion cfml lucee cfexecute
什么是最好的方式做我所做的<cfquery>,即使在queryExecute
CFQUERY
<cfquery name="qry">
SELECT * FROM tbl_products
WHERE filed1 = 1
<cfif structKeyExists(URL, "test")>
AND filed2 = 2
</cfif>
ORDER BY id DESC
</cfquery>
Run Code Online (Sandbox Code Playgroud)
cfexecute
<cfscript>
sql = "
SELECT * FROM tbl_products
WHERE filed1 = 1
ORDER BY id DESC
";
if (structKeyExists(URL, "test")){
sql = "
SELECT * FROM tbl_products
WHERE filed1 = 1
AND filed2 = 2
ORDER BY id DESC
";
}
qry = queryExecute(
sql = sql
);
</cfscript>
Run Code Online (Sandbox Code Playgroud)
我希望我已经很好地解释了自己......
您必须构建SQL字符串.同样非常值得传递param值,这样就可以防止SQL注入.就像是:
<cfscript>
params = {};
sql = "
SELECT * FROM tbl_products
WHERE filed1 = :filed1
";
params["filed1"] = 1;
if (structKeyExists(URL, "test")){
sql &= "AND filed2 = :filed2 ";
params["filed2"] = 2;
}
sql &= "ORDER BY id DESC";
queryExecute(sql, params);
</cfscript>
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用位置参数.
<cfscript>
params = [];
sql = "
SELECT * FROM tbl_products
WHERE filed1 = ?
";
arrayAppend(params, 1);
if (structKeyExists(URL, "test")){
sql &= "AND filed2 = ? ";
arrayAppend(params, 2);
}
sql &= "ORDER BY id DESC";
queryExecute(sql, params);
</cfscript>
Run Code Online (Sandbox Code Playgroud)
这是标签比脚本更好的时代之一.