En utilisant sql_insertq avec une table sans id je me suis aperçu que le retour était 0 quand la ligne était bien insérée. Donc un test classique du type if (sql_insertq…) ne fonctionnait jamais alors que l’insertion était ok.
En creusant j’ai vu que c’est l’appel à mysqli_insert_id qui renvoie 0 car il n’y a pas d’id pour la table (auto-increment).
C’est pas super heureux comme comportement.
Alors j’ai vu aussi qu’il exoste une ligne en commentaire :
// return $r ? $r : (($r===0) ? -1 : 0); pb avec le multi-base.
Il semble que ce soit donc difficile de gérer ce problème au niveau de l’API, il faudrait donc à minima mettre à jour le PHPDoc de sql_insertq et surement de sql_insert pour corriger l’information sur le return qui est fausse et aussi expliquer comment tester le retour.
Est ce qu'on ne serait pas dans un cas où 0 != false ? De ce que j'en
comprends 0 serait licite comme résultat.
Donc faudrait utiliser === ou !== pour distinguer les 2 cas.
Est ce qu’on ne serait pas dans un cas où 0 != false ? De ce que j’en
comprends 0 serait licite comme résultat.
Absolument, dans le cas de cette table le retour 0 n’indique pas une erreur d’insertion mais aucun id ce qui est vrai !
Ce problème avait été contourné à une époque et puis supprimé sans modifier les explications du PHPDoc ce qui rend l’API pas très compréhensible.
Donc faudrait utiliser === ou !== pour distinguer les 2 cas.
C’est ce que j’ai fait mais je trouve pas ça heureux.
Mais bon je dois être le seul alors on va pas se faire chier.
Est ce qu'on ne serait pas dans un cas où 0 != false ? De ce que j'en
comprends 0 serait licite comme résultat.
Absolument, dans le cas de cette table le retour 0 n'indique pas une erreur d'insertion mais aucun id ce qui est vrai !
Ce problème avait été contourné à une époque et puis supprimé sans modifier les explications du PHPDoc ce qui rend l'API pas très compréhensible.
Donc faudrait utiliser === ou !== pour distinguer les 2 cas.
C'est ce que j'ai fait mais je trouve pas ça heureux.
Mais bon je dois être le seul alors on va pas se faire chier.
Autre option que je vois, c'est directement dans la méthode faire le
test sur false et retourner -1 , 0, ou plus selon
ça me parait plus propre de garder false vs 0 ou n’importe quel entier, à charge pour l’appelant de tester proprement === false, mais il faut mettre à jour le PHPDoc pour que ce soit clair
Le hack consistant à renvoyer -1 est un risque de bug en plus sur des cas où on insère explicitement avec un id=-1 et qui ne devient plus testable (ce qui existe aussi dans la nature)