Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Obtenha o ID da tabela após a inserção com ColdFusion e MySQL


Parte 1: Eu pessoalmente não agruparia várias instruções em uma única consulta para reduzir o risco de injeção de SQL. Esta é uma configuração em sua fonte de dados no administrador do ColdFusion. Executar um procedimento armazenado, que pode ser o que você está fazendo (?), é outra história, mas você deve reformular sua pergunta para "Obter chave primária após inserção com procedimento armazenado mySQL" se essa for sua intenção.

Parte 2: ColdFusion, como muitas coisas, torna muito fácil obter a chave primária para um registro recém-inserido - mesmo se você estiver usando chaves de incremento automático, GUIDs ou algo como ROWNUM da Oracle. Isso funcionará em quase todos os bancos de dados suportados pelo Adobe ColdFusion, incluindo MSSQL ou MySQL. A única exceção é a versão do banco de dados -- por exemplo, o MySQL 3 não suportará isso; no entanto, o MySQL 4+ irá.
<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 do CF9+, você pode acessar o novo ID (para qualquer banco de dados) usando o nome da chave genérica:
result.GENERATEDKEY    // All databases

Para CF8, bancos de dados diferentes terão chaves diferentes no valor dos resultados. Aqui está uma tabela simples para ajudar que copiei da documentação do cfquery .
result.identitycol    // MSSQL
result.rowid          // Oracle
result.sys_identity   // Sybase
result.serial_col     // Informix
result.generated_key  // MySQL

Se você tiver alguma dúvida, você pode ver um belo despejo da seguinte forma:
<cfdump var="#result#" />