sql >> Base de Datos >  >> RDS >> Mysql

Obtener ID de tabla después de insertar con ColdFusion y MySQL

Parte 1: Personalmente, no agruparía varias declaraciones dentro de una sola consulta para reducir el riesgo de inyección de SQL. Esta es una configuración dentro de su fuente de datos en el administrador de ColdFusion. Ejecutar un procedimiento almacenado, que podría ser lo que está haciendo (?), es otra historia, pero debe reformular su pregunta para "Obtener la clave principal después de insertar con el procedimiento almacenado mySQL" si esa es su intención.

Parte 2: ColdFusion, como muchas cosas, hace que obtener la clave principal para un registro recién insertado sea muy fácil, incluso si está utilizando claves de incremento automático, GUID o algo como ROWNUM de Oracle. Esto funcionará en casi todas las bases de datos compatibles con Adobe ColdFusion, incluidas MSSQL o MySQL. La única excepción es la versión de la base de datos; por ejemplo, MySQL 3 no admitirá esto; sin embargo, MySQL 4+ lo hará.

<cfquery result="result">
  INSERT INTO myTable (
      title
  ) VALUES (
    <cfqueryparam value="Nice feature!" cfsqltype="cf_sql_varchar">
  )
</cfquery>

<--- get the primary key of the inserted record --->
<cfset NewPrimaryKey = result.generatedkey>

A partir de CF9+, puede acceder a la nueva ID (para cualquier base de datos) utilizando el nombre de clave genérico:

result.GENERATEDKEY    // All databases

Para CF8, diferentes bases de datos tendrán diferentes claves dentro del valor de los resultados. Aquí hay una tabla simple para ayudar que copié de la documentación de cfquery .

result.identitycol    // MSSQL
result.rowid          // Oracle
result.sys_identity   // Sybase
result.serial_col     // Informix
result.generated_key  // MySQL

Si tiene alguna pregunta, puede ver un bonito volcado de la siguiente manera:

<cfdump var="#result#" />