Mysql
 sql >> Base de données >  >> RDS >> Mysql

Obtenir l'ID de table après l'insertion avec ColdFusion et MySQL

Partie 1 : Personnellement, je ne grouperais pas plusieurs instructions dans une seule requête pour réduire le risque d'injection SQL. Il s'agit d'un paramètre de votre source de données sur l'administrateur ColdFusion. L'exécution d'une procédure stockée, ce que vous faites peut-être (?), est une autre histoire, mais vous devez reformuler votre question en "Obtenir la clé primaire après insertion avec la procédure stockée mySQL" si telle est votre intention.

Partie 2 : ColdFusion, comme beaucoup de choses, facilite l'obtention de la clé primaire pour un enregistrement nouvellement inséré, même si vous utilisez des clés d'auto-incrémentation, des GUID ou quelque chose comme ROWNUM d'Oracle. Cela fonctionnera sur presque toutes les bases de données prises en charge par Adobe ColdFusion, y compris MSSQL ou MySQL. La seule exception est la version de la base de données -- par exemple, MySQL 3 ne le supportera pas; cependant, MySQL 4+ le fera.

<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>

Depuis CF9+, vous pouvez accéder au nouvel ID (pour n'importe quelle base de données) en utilisant le nom de clé générique :

result.GENERATEDKEY    // All databases

Pour CF8, différentes bases de données auront des clés différentes dans la valeur des résultats. Voici un tableau simple pour vous aider que j'ai copié de la documentation cfquery .

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

Si vous avez des questions, vous pouvez voir un joli dump comme suit :

<cfdump var="#result#" />