Cel*_*tas 4 sql coldfusion cfqueryparam
例如#Trim(FORM.fromfirstname)#周围的"#"是什么?我正在添加<cfqueryparam...>标签,我想知道是否还需要报价?
<CFQUERY NAME="account" DATASOURCE="#APPLICATION.centralDSN#">
SELECT *
FROM users
WHERE (firstname =<CFQUERYPARAM VALUE="#Trim(FORM.fromfirstname)#">)
AND (lastname = <CFQUERYPARAM VALUE="#Trim(FORM.fromlastname)#">)
AND (email = '#Trim(FORM.fromemail)#')
</CFQUERY>
Run Code Online (Sandbox Code Playgroud)
这是一个不使用该WHERE子句引号的:
<CFIF getUser.RecordCount>
<CFQUERY NAME="cUser" DATASOURCE="#APPLICATION.centralDSN#">
UPDATE users
SET mailing_list = <CFIF IsDefined("FORM.mailing_list")>#FORM.mailing_list#<CFELSE>0</CFIF>
WHERE user_id = #getUser.user_id#
</CFQUERY>
</cfif>
Run Code Online (Sandbox Code Playgroud)
编辑:如果他们什么都不做,保持它们没有坏处,对吗?在另一个文件中,我找到了像
to="#ListFirst(EnglishEmailList)#"
cc="#ListRest(EnglishEmailList)#"
Run Code Online (Sandbox Code Playgroud)
所以如果他们已经在那里我会留下他们?
Pet*_*ton 11
SQL需要字符串的引号.
引号是标准SQL语法的一部分,用于表示字符串(实际上它们几乎在所有语言中).
如果它没有引号,那么SQL解析器就不知道字符串的结束位置和SQL继续.
数字不需要引号 - 价值结束的地方没有歧义.
还要记住#hashes#与SQL无关 - 它们完全在CFML方面.运行cfquery标记时,CF会评估正文(包括它包含的任何哈希表达式)以创建SQL字符串,然后将其传递给数据库(以及其他设置/参数/等).SQL服务器不知道该字符串的哪些部分是硬编码的,哪些部分可能是从哈希中评估的.
cfqueryparam不需要引号.
当您修复查询以使用cfqueryparam时,您正在创建参数,并且标记处理指示SQL数据库的字符串/ etc所需的所有内容.(您永远不需要将cfqueryparam标记本身包含在引号中.)
在cfqueryparam标记内,无论是否对属性使用引号,它都是零差异 - 这三个都产生相同的结果:
<cfqueryparam value="#var#" />
<cfqueryparam value='#var#' />
<cfqueryparam value=#var# />
Run Code Online (Sandbox Code Playgroud)
如果你正在使用<cfqueryparam>那么你永远不需要使用引号.
如果你在SQL中比较一个字符串(而不是使用<cfqueryparam>)那么你需要使用引号.如果你要与一个数字进行比较(而不是使用<cfqueryparam>)那么你就不需要引号.
| 归档时间: |
|
| 查看次数: |
1967 次 |
| 最近记录: |