在Coldfusion函数中使用sql查询的正确方法是什么

时间:2018-11-24 19:31:33

标签: mysql function coldfusion sql-insert coldfusion-2016

我有这段代码,它将变量传递给函数并插入它。但是我遇到了错误:

<cffunction name="insertSupplierPersonnel" output="false" access="public" returnType="struct">
    <cfargument name="name" type="string" required="true" />
    <cfargument name="email" type="string" required="false" default="" />
    <cfargument name="office_phone" type="string" required="false" default="" />
    <cfargument name="mobile_phone" type="string" required="false" default="" />
    <cfargument name="designation" type="string" required="false" default="" />

    <cfset var res = '' />

    <cfquery datasource="#session.dsn_aset#" result="res">
        INSERT INTO `supplier_personnel_incharge` (
            `name`,
            `email`,
            `office_phone`,
            `mobile_phone`,
            `designation`
        )
        VALUES
        (
            cfargument.name,
            cfargument.email,
            cfargument.office_phone,
            cfargument.mobile_phone,
            cfargument.designation
        ) ;
    </cfquery>

    <cfreturn res />
</cffunction>

<cfset res = insertSupplierPersonnel(name='#form.personnel_name#', email='#form.personnel_email#', office_phone='#form.personnel_office_phone#', mobile_phone='#form.personnel_mobile_phone#', designation='#form.personnel_designation#') />

<cfdump  var="#res#">

我收到此错误:

enter image description here

cfargument.name有问题。使用cfargument进行插入查询的正确方法是什么?预先感谢。

2 个答案:

答案 0 :(得分:6)

首先,正确的范围是arguments,而不是cfargument。所以,改变这种事情:

cfargument.name,

对此:

arguments.name,

接下来,您必须在变量名称前加上井号以获取变量的值,即#arguments.name#

接下来,使用查询参数,即<cfqueryparam value="#arguments.name#">。除其他外,它们将转义SQL查询语法中使用的特殊字符。

答案 1 :(得分:0)

总结以上所有正确答案和评论。这是您的最佳做法:

  • 函数returnType应该是“查询”,而不是“结构”
  • 如果您指定一个default值,则CF会将参数识别为“不需要”
  • 在所有查询参数上使用cfqueryparam

可选

  • 如果没有给出值,请使用null的{​​{1}}属性插入cfqueryparam
  • 在sql语句的末尾不需要结尾的分号

NULL