Mysql和使用函数最后插入ID的问题

时间:2019-01-29 16:59:35

标签: mysql coldfusion railo

运行查询时出现此错误

  

您的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;

我希望插入数据,但此处失败。

预先感谢

安德里亚

2 个答案:

答案 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)。