Jump to content

[RESOLU] Problème requète SQL (V1.4)


Recommended Posts

Bonjour,

je cherche à recuperer l'i du prochain enregistrement dans la table "orders".
Pour cela j'exécute la fonction suivante :

public function getNextOrderId()
   {
       $sql = 'SHOW TABLE STATUS FROM `'._DB_NAME_.'` LIKE "'._DB_PREFIX_.'orders"';
       $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
       return $result[10];
   }



Mais elle ne retourne jamais rien. Où serait l'erreur ?

Link to comment
Share on other sites

Merci pour ta réponse.
Non, ça ne fonctionne pas mieux.
Avec un var_dump :

$sql = 'SELECT max( LAST_INSERT_ID(id_order)) FROM "'._DB_PREFIX_.'orders"';
       $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
       var_dump($result);



j'obtiens : bool(false).

Mais en executant ton $sql dans phpMyAdmin, il m'indique de toute façon une erreur sql (il manquait également une double cote mais je l'ai remise)

Link to comment
Share on other sites

Bonjour,

Pourquoi ne pas faire quelques choses comme ci-dessous ?

public function getNextOrderId()
   {
       $sql = 'SELECT max(id_order) FROM "'._DB_PREFIX_.'orders"';
       $max = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($sql);
       return $max++;
   } 



Cordialement

Link to comment
Share on other sites

Je préférais le prochain auto incrément dans l'hypothèse où des commandes seraient supprimées manuellement dans la base.

Mais encore une fois, ce code là ne renvoie rien et un autre var_dump de $max m'indique encore bool(false). Y'a comme un truc qui cloche...

Pour précisions, cette fonction s'exécute dans la classe d'un module et est appellée depuis un fichier validation.php

echo $monModule->getNextOrderId();



EDIT :

ce code :

public function getNextOrderId()
   {
       $sql = 'SELECT max(id_order) FROM '._DB_PREFIX_.'orders';
       $max = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($sql);
       return $max++;
   }



marche enfin (en enlevant les doubles côtes) ! Cool !

Mais j'ai vraiment besoin du prochain auto incrément ...

Link to comment
Share on other sites

et

public function getNextOrderId()
   {
       $sql = 'SHOW TABLE STATUS FROM `'._DB_NAME_.'` LIKE "'._DB_PREFIX_.'orders"';
       $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
       return $result['auto_increment'];
   } 



ca ne fonctionne pas ?

Link to comment
Share on other sites

Ca fonctionne déjà mieux.
Le var_dump de $result m'affiche bien le tableau voulu.
Par contre $result['auto_increment'] n'est pas compris ... (ni $result['Auto_increment'])

YEAH : ça marche avec

return $result[0]['Auto_increment'];



Un tableau peut en cacher un autre !

Merci pour votre aide !

Link to comment
Share on other sites

Je préférais le prochain auto incrément dans l’hypothèse où des commandes seraient supprimées manuellement dans la base.


Si j'avais su ça ! mazette j'aurais passé mon chemin... dieu sait(ou krishna, bouddha , mahome...peu importe) à quel point ça me hérisse de me sentir obligé d'expliquer pour la énième fois en quoi ces suppressions de commandes sont inutiles et toujours risquées... Je referais pas mon sermon lol , mais ça aura été souligné ;) .

Pour précisions, cette fonction s’exécute dans la classe d’un module et est appellée depuis un fichier validation.php


Ce qui me fait me demander en quoi la valeur d'autoinc t'est nécessaire, sinon pour des mauvaises raisons.
Je te suggère si tu ne l'as déja fait de googler sur l'utilisation du last insert et des effets de bords que celà pouvait causer.

Après tu as tout à fait le droit de dire et penser : "mais de quoi il se mèle" , j'essaye juste d'attirer ton attention sur le fait que peut être tu avais de meilleurs choix à faire dans ton code, dont je ne connais rien...J'ai bien dis peut être.
Link to comment
Share on other sites

Hé hé !

Ne montons pas sur nos grands poneys !
Je suis, à titre personnelle, tout à fait d'accord avec toi. De manière générale, je déteste trifouiller la base.

Mais j'essaye de faire un module le plus générique possible, dont je ne serai pas l'utilisatrice, donc je pare au pire. Tu ne ferais pas pareil ?

Je te suggère si tu ne l’as déja fait de googler sur l’utilisation du last insert et des effets de bords que celà pouvait causer.


C'est à dire ? C'est justement la solution que je ne voulais pas retenir .
Link to comment
Share on other sites

Du coup , je réalise en me relisant que si on ne le sait pas , on devine pas nécessairement je disais tout celà sur le ton de la plaisanterie...lol

J'ai ma manière bien à moi d'appuyer certains conseils ou avoir l'air ronchon (ça j'adore!), histoire de ne pas avoir l'impression de répéter toujours les mêmes phrase et tomber dans la monotonie, ce qui m'écarterait forcément de ce forum ;) .

Pour te répondre, si, bien sûr, si je devais parer au plus pressé je pourrais probablement adopter des choix rapides, en plein accord avec mon client toutefois.

Trifouiller la base ne me pose pas de problème en soi, comme je te le disais c'est plus l'utilisation de ces indexes qui est risquée, et je voulais t'en avertir. Tout dépend de ce que tu cherches à faire en fait.
Un module qui utilise ces indexes en production peut parfaitement se retrouver à écraser une commande faite dans le même temps.

[quote]Je te suggère si tu ne l’as déja fait de googler sur l’utilisation du last insert et des effets de bords que celà pouvait causer.[/quote]
C’est à dire ? C’est justement la solution que je ne voulais pas retenir .



Oui et non , car interroger les index de table via SHOW TABLE STATUS revient au même, pour moi, si tu comptes te servir de cet index pour insérer un nouvel enregistrement à l'id forcé. Une fois de plus , en pré prod , no problemo. en production c'est dangereux.

Mais je vais pas lancer un débat inutile. Je vois bien que tu sais ce que tu fais, en connaissance de cause, et donc mes 'alertes' sont inutiles ;)

Link to comment
Share on other sites

Toute "alerte" est bonne à prendre en ce qui me concerne.
Donc pas de souci. :)

Juste pour éclairer un peu le truc, j'ai besoin de connaitre l' id d'une commande qui est créée (et donc reçoit un id) deux lignes de code après que j'en ai besoin (pas clair ?). Donc obligée d'anticiper un peu ...

A + !

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...