LAST_INSERT_ID
se comportera comme vous l'avez décrit, mais vous avez une erreur sans rapport dans l'instruction d'insertion précédente en raison de l'absence de point-virgule à la fin. Lors du diagnostic d'erreurs de syntaxe dans MySQL, la chaîne SQL contenue dans le message d'erreur se trouve généralement immédiatement après l'erreur de syntaxe.
Envisagez de réorganiser vos instructions pour plus de lisibilité, afin de pouvoir identifier plus facilement les erreurs de syntaxe comme celle-ci. Par exemple :
public void Insert(TUser member)
{
string sql = @"
Insert into users
(UserName, PasswordHash, SecurityStamp, Email, EmailConfirmed, PhoneNumber, PhoneNumberConfirmed, AccessFailedCount, LockoutEnabled, LockoutEndDateUtc, TwoFactorEnabled)
values
(@name, @pwdHash, @SecStamp, @email, @emailconfirmed, @phonenumber, @phonenumberconfirmed, @accesscount, @lockoutenabled, @lockoutenddate, @twofactorenabled);
select LAST_INSERT_ID();
";
member.Id = db.Connection.ExecuteScalar<int>(sql, new
{
name = member.UserName,
pwdHash = member.PasswordHash,
SecStamp = member.SecurityStamp,
email = member.Email,
emailconfirmed = member.EmailConfirmed,
phonenumber = member.PhoneNumber,
phonenumberconfirmed = member.PhoneNumberConfirmed,
accesscount = member.AccessFailedCount,
lockoutenabled = member.LockoutEnabled,
lockoutenddate = member.LockoutEndDateUtc,
twofactorenabled = member.TwoFactorEnabled
});
}
Par cette réponse
, vous pouvez également supprimer la diffusion sur LAST_INSERT_ID
si vous utilisez une version récente de MySQL.