运行查询时出现此错误
您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第3行的“选择last_insert_id()作为产品ID”附近使用
NativeErrorCode号1064
queryError字符串:
insert into products (systemname, systemversion, created_date)
values ('web andrea', '', now()); select last_insert_id() as productid;
DatabaseName字符串MySQL
DatabaseVersion字符串5.6.10-log
DriverName字符串MySQL-AB JDBC驱动程序
insert into products (systemname, systemversion, created_date) values ('web andrea', '', now()); select last_insert_id() as productid;
我希望插入数据,但此处失败。
预先感谢
安德里亚
答案 0 :(得分:6)
除了@GMB的注释,它之所以出错是因为出于安全原因,默认情况下不允许多个语句-防止sql注入。可以通过adding allowMultiQueries=true
to the DSN settings启用它们。但是,请确保所有查询都使用cfqueryparam来防止SQL注入。
话虽如此,您不需要last_insert_id()
或多个语句。而是使用cfquery's "result" attribute。插入之后,CF用新的记录ID填充变量yourResultName.GENERATEDKEY
<cfquery result="yourResultName" datasource="yourDSN">
insert into products (systemname, systemversion, created_date)
values (
<cfqueryparam value="web andrea" cfsqltype="cf_sql_varchar">
, <cfqueryparam value="" cfsqltype="cf_sql_varchar">
, now()
)
</cfquery>
<!--- DEMO --->
<cfoutput>
New ID (yourResultName.GENERATEDKEY) = #yourResultName.GENERATEDKEY#
</cfoutput>
答案 1 :(得分:2)
您不是在运行一个查询,而是在两个查询:先运行INSERT
,然后再运行SELECT
。
在您的应用程序中,您需要进行两个个不同的查询调用(一个用于插入,另一个用于获取最后插入的ID)。
请注意,您的数据库驱动程序可能具有内置函数来返回最后插入的ID(相当于PHP中的mysqli_insert_id
)。