mbarreteau Posted July 6, 2011 Share Posted July 6, 2011 Bonjour,Si vous utilisez mysql4, il est possible, en utilisant l'override de la classe Order ci-dessous de contourner le problème (il est préférable de passer en mysql5 mais si vous ne pouvez vraiment pas...) : <?php /* * 2011 Net Concept * * @author Matthieu Barreteau / Net Concept * * This override class is used to correctly create an invoice number when using mysql 4. */ class Order extends OrderCore { public function setInvoice() { // in all case call the parent parent::setInvoice(); // look if we have an invoice number set in database $combien = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('SELECT `invoice_number` FROM `'._DB_PREFIX_.'orders` WHERE `id_order` = '.(int)($this->id)); $number = $combien['number']; // No invoice_number, this server use mysql 4 if($number==0) { // Get new invoice number $quelestlemax = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('SELECT MAX(`invoice_number`) + 1 AS `invoice_number` FROM `'._DB_PREFIX_.'orders`'); $lemaxplusun = $quelestlemax['invoice_number']; // Set new invoice number Db::getInstance()->Execute('UPDATE `'._DB_PREFIX_.'orders` SET `invoice_number` = '.$lemaxplusun.', `invoice_date` = \''.date('Y-m-d H:i:s').'\' WHERE `id_order` = '.(int)$this->id); // store result in the object $res = Db::getInstance()->getRow(' SELECT `invoice_number`, `invoice_date` FROM `'._DB_PREFIX_.'orders` WHERE `id_order` = '.(int)$this->id ); $this->invoice_date = $res['invoice_date']; $this->invoice_number = $res['invoice_number']; } } } ?> Cordialement,Matthieu Barreteau Link to comment Share on other sites More sharing options...
Raphaël Malié Posted July 6, 2011 Share Posted July 6, 2011 Bonjour,je viens de regarder la méthode actuelle dans le code de Prestashop, et je ne vois aucune raison qui ferait qu'elle ne marcherait pas sous MySQL 5, pouvez vous me dire ce qui clochait ?Cordialement Link to comment Share on other sites More sharing options...
mbarreteau Posted July 6, 2011 Author Share Posted July 6, 2011 Bonjour,Oui, on est bien d'accord, la requête fonctionne très bien en mysql 5 mais pas en mysql 4.En mysql 4, la requête en question ne fonctionne pas : UPDATE `ps_orders` SET `invoice_number` = (SELECT `invoice_number` FROM ( SELECT MAX(`invoice_number`) + 1 AS `invoice_number` FROM `ps_orders`) tmp ), `invoice_date` = '2011-07-06 13:35:43' WHERE `id_order` = 77 Erreur : #1093 - You can't specify target table 'ps_orders' for update in FROM clause Cordialement, Link to comment Share on other sites More sharing options...
Raphaël Malié Posted July 6, 2011 Share Posted July 6, 2011 Okay je vois, en fait ce bug avait déjà été remonté sur le bug tracker et est corrigé sur le SVN depuis la révision 7217, la correction sera donc disponible dans la prochaine version qui sortira, ce qui explique pourquoi je ne voyais aucun soucis.Merci tout de même pour le fix, qui permettra à ceux qui ont besoin de rapidement corriger le problème d'avoir un Prestashop fonctionnel pour MySQL4 en attendant la prochaine version.Cordialement Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now