Vous ne pouvez pas le faire avec une seule instruction SQL dans MySQL. Si MySQL prenait en charge les séquences de style Oracle, vous seriez en mesure de le faire dans une seule instruction. Mais parce que auto_increment ne vous donnera pas l'ID suivant jusqu'à après l'insertion a eu lieu, vous devez réellement avoir la ligne insérée avant d'avoir accès à l'ID. Le plus proche, vous pouvez obtenir MySQL est la suivante:
insert into imgae (image) values (null);
update imgae set image=concat(last_insert_id(), '.jpg') where id=last_insert_id();
BTW: Je vois votre table est appelée imgae
qui est probablement une faute de frappe. Vouliez-vous dire image
? En outre, lorsque j'ai essayé d'exécuter votre instruction create table
, il a échoué. J'ai dû faire quelques changements pour le faire fonctionner afin que je puisse valider ma réponse. Il devrait ressembler à ceci:
create table imgae(id int auto_increment primary key, image text);
Oui, c'est une faute de frappe. Merci pour votre réponse. En fait, j'utilise le fichier sfWidgetFormInputFileEditable de Symfony, qui semble devoir déterminer le nom de l'image avant l'exécution du sql d'insertion. Il est difficile d'avoir le nom de l'image avec une valeur Pk auto-incrémentée. – xdazzyy
@xdazzyy: Je comprends qu'il est pratique d'avoir le pk dans le nom de fichier, et c'est certainement possible de le faire. Mais à l'OMI, ça ne vaut pas la complexité supplémentaire que vous aurez à ajouter pour le faire fonctionner. Sûrement c'est une exigence agréable et pas difficile. Est-ce? – Asaph
Merci, Asaph. Mais, malheureusement, c'est une exigence difficile ... – xdazzyy