Deel 1: Persoonlijk zou ik niet meerdere verklaringen in één enkele query bundelen om het risico van SQL-injectie te verminderen. Dit is een instelling binnen uw gegevensbron op de ColdFusion-beheerder. Het uitvoeren van een opgeslagen procedure, wat mogelijk is wat u aan het doen bent (?), is een ander verhaal, maar u moet uw vraag herformuleren in "Primaire sleutel ophalen na invoegen met mySQL Stored Procedure" als dat uw bedoeling is.
Deel 2: ColdFusion maakt, zoals zoveel dingen, het verkrijgen van de primaire sleutel voor een nieuw ingevoegd record heel gemakkelijk - zelfs als u auto-increment-sleutels, GUID's of iets als Oracle's ROWNUM gebruikt. Dit werkt op bijna elke database die wordt ondersteund door Adobe ColdFusion, inclusief MSSQL of MySQL. De enige uitzondering is de versie van de database - MySQL 3 ondersteunt dit bijvoorbeeld niet; MySQL 4+ echter wel.
<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>
Vanaf CF9+ hebt u toegang tot de nieuwe ID (voor elke database) met behulp van de generieke sleutelnaam:
result.GENERATEDKEY // All databases
Voor CF8 hebben verschillende databases verschillende sleutels binnen de resultaatwaarde. Hier is een eenvoudige tabel die ik heb gekopieerd uit de cfquery-documentatie .
result.identitycol // MSSQL
result.rowid // Oracle
result.sys_identity // Sybase
result.serial_col // Informix
result.generated_key // MySQL
Als je vragen hebt, kun je een mooie stortplaats als volgt zien:
<cfdump var="#result#" />