Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/11/2010, 21h54   #1
Membre régulier
 
Inscription : juillet 2004
Messages : 393
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 393
Points : 80
Points : 80
Par défaut Valeurs vide deviennent des 0

Bonjour à tous,

je travail avec des requêtes préparées. Sur mes valeurs à nombre, lorsque je bind la valeur qui est vide, elle se transforme en 0 sur ma base MySQL.

J'ai essayé :

$this->dbh->setAttribute(PDO::ATTR_ORACLE_NULLS,PDO::NULL_EMPTY_STRING);

mais ça ne change rien

Merci de votre aide
__________________
www.ou-dejeuner.com A chacun son déjeuner ! |Blackprism.org
shadeoner est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 22h13   #2
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
Bonjour,

quelles sont les caractéristiques du champ en base ?
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 22h16   #3
Membre régulier
 
Inscription : juillet 2004
Messages : 393
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 393
Points : 80
Points : 80
C'est un float(3,1)
__________________
www.ou-dejeuner.com A chacun son déjeuner ! |Blackprism.org
shadeoner est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 22h18   #4
Membre chevronné
 
Inscription : juillet 2003
Messages : 625
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 625
Points : 600
Points : 600
Bonjour,

t'aurais pas un default 0 sur ce champs ?
__________________
Le savoir est utile que s'il est partagé par tous.
/(bb|[^b]{2})/
!sleep() ? array((string))
syl2095 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 22h19   #5
Membre régulier
 
Inscription : juillet 2004
Messages : 393
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 393
Points : 80
Points : 80
Non j'ai bien un NULL
__________________
www.ou-dejeuner.com A chacun son déjeuner ! |Blackprism.org
shadeoner est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 22h23   #6
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
montre nous ton code php stp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 22h26   #7
Membre chevronné
 
Inscription : juillet 2003
Messages : 625
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 625
Points : 600
Points : 600
et si au lieu de lui envoyer du vide, tu lui envoyais NULL ?
__________________
Le savoir est utile que s'il est partagé par tous.
/(bb|[^b]{2})/
!sleep() ? array((string))
syl2095 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 22h29   #8
Membre régulier
 
Inscription : juillet 2004
Messages : 393
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 393
Points : 80
Points : 80
bien sûr, je vous mets des extraits des parties importantes.

Pour information j'ai écris une class pour faciliter certaines opérations, d'où les $this

Code :
1
2
3
4
5
6
7
8
9
10
11
12
$this->dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$this->dbh->setAttribute(PDO::ATTR_ORACLE_NULLS,PDO::NULL_EMPTY_STRING);
 
$rst_prix_formule         = $_POST['rst_prix_formule']; (ici $rst_prix_formule = (string) )
 
$sql = 'UPDATE MA_TABLE SET rst_prix_formule         = :rst_prix_formule';
 
$this->prepare = $this->dbh->prepare ( $sql );
 
$sqlClass->bindParam('rst_prix_formule'         , $rst_prix_formule);
 
$this->prepare->execute();
__________________
www.ou-dejeuner.com A chacun son déjeuner ! |Blackprism.org
shadeoner est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 22h43   #9
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Ce n'est pas un problème PDO, tu obtiendras la meme chose si tu fais le test dans phpmyadmin.
Ton float ne peut pas valoir une chaine vide.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 22h46   #10
Membre régulier
 
Inscription : juillet 2004
Messages : 393
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 393
Points : 80
Points : 80
En fait je souhaite que ma valeur vide devienne null du côté MySQL et non 0,0
__________________
www.ou-dejeuner.com A chacun son déjeuner ! |Blackprism.org
shadeoner est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 22h48   #11
Membre chevronné
 
Inscription : juillet 2003
Messages : 625
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 625
Points : 600
Points : 600
t'as essayé en insérant NULL ?
__________________
Le savoir est utile que s'il est partagé par tous.
/(bb|[^b]{2})/
!sleep() ? array((string))
syl2095 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 22h49   #12
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
Es tu sur que ce n'est pas un $this->bindParam() dans ta classe qu'il faut utiliser ?

Sinon, tu peux toujours tester de rajouter les 2 points...

Code sql :
1
2
 
$sqlClass->bindParam(':rst_prix_formule', $rst_prix_formule);
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 22h50   #13
Membre régulier
 
Inscription : juillet 2004
Messages : 393
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 393
Points : 80
Points : 80
Oui c'est ce que je fais sur certains scripts mais je trouve ça bricolo :

$ma_valeur = ($_POST['ma_valeur']=='' ? null : $_POST['ma_valeur']);
__________________
www.ou-dejeuner.com A chacun son déjeuner ! |Blackprism.org
shadeoner est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 22h52   #14
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
Citation:
Envoyé par sabotage Voir le message
Ce n'est pas un problème PDO, tu obtiendras la meme chose si tu fais le test dans phpmyadmin.
Ton float ne peut pas valoir une chaine vide.
Exact d'ailleurs sous PHPMyAdmin, on ne peut pas créer de colonne float en défault NULL
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 22h56   #15
Membre régulier
 
Inscription : juillet 2004
Messages : 393
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 393
Points : 80
Points : 80
je viens de faire :

Code :
$rst_prix_formule         = ( $_POST['rst_prix_formule']=='' ? null : $_POST['rst_prix_formule']);
j'ai bien NULL dans ma base, mais j'ai 15 valeurs à insérer et je trouve ça crade...

Il doit bien y avoir un moyen de convertir les valeurs vides en NULL et non en 0 ?
__________________
www.ou-dejeuner.com A chacun son déjeuner ! |Blackprism.org
shadeoner est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 22h59   #16
Membre chevronné
 
Inscription : juillet 2003
Messages : 625
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 625
Points : 600
Points : 600
petit test mais peut être me trompe je :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
 
CREATE TABLE IF NOT EXISTS `testTable` (
  `testFloat` float(3,1) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
 
--
-- Contenu de la table `testTable`
--
 
INSERT INTO `testTable` (`testFloat`) VALUES(0);
INSERT INTO `testTable` (`testFloat`) VALUES('');
INSERT INTO `testTable` (`testFloat`) VALUES(NULL);
 
 
SELECT * FROM testTable

donne
__________________
Le savoir est utile que s'il est partagé par tous.
/(bb|[^b]{2})/
!sleep() ? array((string))
syl2095 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 23h27   #17
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
Code :
$ma_valeur = ($_POST['ma_valeur']=='' ? null : $_POST['ma_valeur']);
en effet ceci est crade et peut lancer des notices si POST est mal définit...
ceci n'aura pas ce problème
Code :
$ma_valeur = isset($_POST['ma_valeur']) ? $_POST['ma_valeur']: null;
ceci pourrait faire quelque chose de mieux
Code :
$ma_valeur = empty($_POST['ma_valeur']) ? null : $_POST['ma_valeur'];
cependant php mélange les zéro et les vide
Code :
$ma_valeur = (empty($_POST['ma_valeur']) and !is_numeric($_POST['ma_valeur']) )? null : $_POST['ma_valeur'];
c'est là qu'on se dit que les formulaires à la main, c'est performant certe mais c'est lourdingue.
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 23h30   #18
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Je trouverais le test plus logique comme ça :
Code :
$ma_valeur = (isset($_POST['ma_valeur']) && $_POST['ma_valeur'] !== '' ) ? NULL : $_POST['ma_valeur'];
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 23h35   #19
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
Plutôt comme ceci alors (coquille) :

Code php :
1
2
 
$ma_valeur = (isset($_POST['ma_valeur']) && $_POST['ma_valeur'] !== '' ) ? $_POST['ma_valeur'] : NULL;
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 23h37   #20
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Mais heu !
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 01
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h21.


 
 
 
 
Partenaires

Hébergement Web