【问题标题】:Why is MySQL looking for colum with name of value inserting为什么 MySQL 正在寻找插入值名称的列
【发布时间】:2012-03-26 13:37:55
【问题描述】:

在对 MySQL 进行 cfquery 时,MYSQL 在以下代码的“字段列表”中给出错误“未知列”“问题”:

<cfquery name="qUpdateTheQuestion" datasource="testmaster">
INSERT INTO ETrueFalseQuestions
VALUES (<cfoutput>#newTypeID#</cfoutput>, `<cfoutput>#FORM.Question#</cfoutput>`, <cfoutput>#FORM.truefalse#</cfoutput>

我已经尝试了我能想到的所有方法来尝试解决这个问题,以及我在尝试搜索解决方案时发现的一些建议,例如使用反引号而不是单引号。

我也不明白为什么它要搜索名为 Question 的列,因为那是 FORM.Question 的值,并且会根据输入到表单中的内容而变化。任何建议将不胜感激。

【问题讨论】:

  • 请将您的变量包装在cfqueryparam&lt;cfqueryparam value="#newTypeID#" cfsqltype="CF_SQL_INT" /&gt;&lt;cfqueryparam value="#FORM.question#" cfsqltype="CF_SQL_VARCHAR" /&gt;&lt;cfqueryparam value="#FORM.truefalse#" cfsqltype="CF_SQL_BIT" /&gt;
  • 回复:为什么要搜索名为 Question 的列 FORM.Question 包含一个字符串。文字字符串必须用单引号括起来(或用 cfqueryparam 包裹),否则您的数据库会假定它是对象名称,即列或表名称。此外,您永远不需要在 cfquery 中使用 cfoutput 标记。
  • 使用了 cfqueryparam,但与仅使用变量相比,这样做有什么优势吗?
  • cfqueryparam 具有以下优势:防止 SQL 注入攻击使用允许数据库重新使用已编译查询的绑定变量,从而提高性能。
  • 您使用的&lt;cfoutput&gt;s 在cfquery 标记中也是不必要的。

标签: mysql coldfusion cfquery


【解决方案1】:

这个查询对我来说毫无意义

通常应该是这样的

INSERT INTO ETrueFalseQuestions (IdColumnName, questionColumnName, questionTrueFalse)     
VALUES ( #newTypeID#, '#form.Question#', #form.truefalse# )

所以你需要

  1. 列出列
  2. 不要在&lt;cfquery&gt; 中使用&lt;cfoutput&gt;
  3. 在字符串值周围加上单引号或使用&lt;cfqueryparam&gt;

PS:我使用的列名是编造的,你需要修复它们以匹配你的。

【讨论】:

  • 我还要添加上面提到的 s992。使用 cfqueryparam。
  • 同上 scott 的 ans s992 建议。
猜你喜欢
  • 2013-02-20
  • 2015-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-01
  • 1970-01-01
  • 2018-01-24
相关资源
最近更新 更多