8791 sujets

Développement web côté serveur, CMS

Bonjour à tous,

J'ai un problème totalement illogique, insensé même. Je ne comprends vraiment pas, c'est rare que je bute comme ça. J'ai une base de données simples, on-ne-peut plus simple même. Juste trois champs : "reference" ; "prix" ; "date". Bien évidemment en varchar pour les deux premiers, puis date pour le dernier. Il n'y a rien d'autres.
Lorsque je fais un "INSERT" via. la classe PDO avec "15" comme prix, il m'enregistre "15.00000" ! Pourquoi cinq zéros ? J'en sais fichtre rien. Ce n'est même pas le nombre maximal de mon varchar ; ça ne correspond à rien.

Je vous laisse un print_r de ma requête PDO :
PDOStatement Object ( [queryString] => INSERT INTO widjoo_pro_activities_invoices_products(product_price, invoice_reference, create_timestamp) VALUE (:product_price, :invoice_reference, :create_timestamp) )

Ainsi que des valeurs :
Array ( [product_price] => 15 [invoice_reference] => 11W11110315 [create_timestamp] => 2011-11-08 08:56:52 )

Je précise que j'ai vérifié mille fois sur PHPmyAdmin, et que les cinq zéros s'ajoutent à chaque fois, quel que soit le prix. J'ai tout essayé : supprimer la table, la recréer ... bon, j'ai pas encore essayer en changeant le nom du champs, faut pas exagérer non plus ...

J'ai recherché sur internet et personne ne semble avoir déjà eu ce problème, je ne comprends vraiment pas ... Smiley ohwell
Modifié par Gaylord.P (08 Nov 2011 - 16:42)
Bonjour,

Juste une remarque, les valeurs de ton array n'ont pas de guillemets ... peut-être les valeurs ne sont elles pas considérées comme des chaînes de caractères.


Array ( [product_price] => "15" [invoice_reference] => "11W11110315" [create_timestamp] => "2011-11-08 08:56:52" )
Modifié par loicbcn (08 Nov 2011 - 09:46)
Hello.

Ce n'est pas très cohérent d'insérer des données numériques dans un Varchar. Passe ton champ Prix dans le type numérique qui va bien, là tu ne vas faire que ça d'avoir des erreurs de la sorte.
Gaylord.P a écrit :
Bonjour à tous, .........

Tu dis ultra simple ta table OUI moi je dis comme toi, alors pourquoi cette folle syntaxe Smiley decu
C' est juste pour faire savant Smiley confused
J'aurais écris tout bétement mes trois valeur venant de variables simples ! ou directement des valeurs ....
execute(array( ':product_price' => '15', ':invoice_reference' => '11W11110315', ':create_timestamp' => '2011-11-08 08:56:52' ));
Modifié par Christele (08 Nov 2011 - 13:28)
Bonjour à tous et merci d'avoir répondu,

Pour répondre à la dernière question, car toutes mes insertions passent par des requêtes préparées ; mon projet est monté ainsi. J'ai passé toutes mes valeurs numériques et type NUMERIC, comme j'aurais du faire il y a bien longtemps. L’anomalie est résolue. Mais je suis quand même très surpris de mon problème d'origine, je ne vois vraiment pas d’où peux venir le soucis ... enfin c'est résolu, et c'est l'essentiel.

Encore merci Smiley ravi
Gaylord.P a écrit :
Bonjour à tous et merci d'avoir répondu,
Pour répondre à la dernière question, car toutes mes insertions passent par des requêtes préparées

Sans doute parceque tu ne t'imposes pas la rigueur du programmeur Smiley smile
Certains disent tirer les cheveux en quatre, moi je dis de mieux en mieux comprendre et maitriser. Exemple tu dis
"car toutes mes insertions passent par des requêtes préparées "
moi je pense que toutes tes insertions passent par des requêtes utilisant "prépare"
Pas préparées si non tu n'aurait pas pu avoir ce probléme Smiley confused

préparé c'est quand la requéte est envoyée a SQL et validée avant l'EXEC
pour cela il faut émuler
<?php
$bdd->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
?>

Modifié par Christele (08 Nov 2011 - 18:17)