Alors, je vais peut-être dire des bêtises et il y a peut-être une solution plus simple mais voilà comment moi je ferais:
Premièrement tu crées un nouveau champ dans ta table que tu nommes "finalisee" par exemple avec une valeur par défaut à 0.
Lorsque le client valide la commande tu l'insères de suite dans ta BDD, ce qui aura pour effet de créer son ID qui ne bougera plus, tu suis la procédure de commande habituelle et ce n'est qu'à la fin, lorsque le client a validé définitivement sa commande que tu passes la champ "finalisee" à 1.
Il y aurait aussi la fonction uniqid() qui va te retourner quelque chose comme 51745c5533cd5 mais ça risque d'être un peu lourd pour l'utilisateur.