IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

PDO insert into


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2019
    Messages : 35
    Points : 30
    Points
    30
    Par défaut PDO insert into
    FIXED : Probleme de virgule dans ma requete

    Bonjours j'ai un probleme d'insertion de valeurs vers ma BDD....

    ma table :
    Nom : bdd.png
Affichages : 157
Taille : 36,4 Ko


    dans ma function addBuilding en parametre $infos est un tableau et [edificeid] est vide j'ai fait en sorte qui soit NULL mais cela semble causer probleme.... est-ce que je me trompe ?

    $infos
    (
    [edificeid] =>
    [nom_du_lieu] => MontrealCPI
    [numero] => 458
    [rue] => aaa
    [ville] => d
    [province] => Quebec
    [pays] => d
    [codePostal] => aaa
    [actif] => no
    [memberid] => 46
    )


    voici la function
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    [PHP] 
    function addBuilding($pdo,$infos) {
     
    try {
        $sql = "INSERT INTO TFSPCC__edifice (edificeid, nom_du_lieu, numero, rue, ville, province, pays, codePostal, actif, memberid) VALUE (:edificeid , :nom_du_lieu, :numero, :rue, :ville, :province, :pays, :codePostal, :actif :memberid)";
     
        $stmt= $pdo->prepare($sql);
     
        $stmt->execute($infos);
     
    } catch (Exception $e) {
        die( $e. "error SQL");
    }
    };
    [/PHP]

    je recois toujour cette erreur
    PDOException: SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row 1 /La liste de valeurs d'insertion ne correspond pas à la liste de colonnes



    Si j'écris mon code de cette facon cela passe numero 1.... mais clairement que je ne veux pas passer par cette procedure c'est beaucoup trop long de tout écrire dans les values.
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [PHP]
    $sql = "INSERT INTO `TFSPCC__edifice` (`edificeid`, `nom_du_lieu`, `numero`, `rue`, `ville`, `province`, `pays`, `codePostal`, `actif`, `memberid`) VALUES (NULL, 'd', 'd', 'd', 'd', 'd', 'd', 'd', 'no', '46');";
    $stmt= $pdo->prepare($sql);
    $stmt->execute();
    [/PHP]

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 219
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 219
    Points : 8 450
    Points
    8 450
    Billets dans le blog
    17
    Par défaut
    Si jamais tu es sous MySQL, tu peux utiliser la syntaxe alternative du INSERT qui reprend celle du UPDATE et qui est beaucoup plus lisible quand le nombre de colonnes augmente.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $sql = <<<SQL
        INSERT INTO TFSPCC__edifice
        SET
            edificeid = :edificeid,
            nom_du_lieu = :nom_du_lieu,
            numero = :numero,
            rue = :rue,
            ville = :ville,
            province = :province,
            pays = :pays,
            codePostal = :codePostal,
            actif = :actif,
            memberid = :membreid
        SQL;

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2019
    Messages : 35
    Points : 30
    Points
    30
    Par défaut
    Je ne savais même pas que je pouvais faire cela, c'est clairement plus lisible merci de l'information.

  4. #4
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 628
    Points
    3 628
    Billets dans le blog
    8
    Par défaut
    Par ailleurs, tu mets tous tes champs "not nullable". Je pense que c'est une erreur.
    Il y a des adresses sans numéro ni rue (un hameau), et sans province.Es-tu bien sûr que tes utilisateurs résideront toujours au Québec ?
    Bref, il faut faire des adresses infiniment plus souples.
    Il manque également le champ "complement" pour les grandes résidences, il y a toujours un complément d'adresse.
    Personnellement, je ferais

    adresse, complement, codePostal, ville, province, pays (tout en nullable sauf ville et pays)

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 311
    Points : 39 677
    Points
    39 677
    Billets dans le blog
    9
    Par défaut
    Je ne suis pas du tout d'accord.

    Tout d'abord, ces colonnes (et non pas "champs") devraient bien rester "not null" sous réserve que la base de données soit bien modélisée, ce qui est loin d'être le cas ici. En effet, pour tous les édifices présents dans une même ville, on devra ressaisir la ville avec des risques d'incohérences orthographiques. Même chose pour les codes postaux, les rues, etc.
    Les colonnes "nullables" sont l'exception dans une base de données bien construite.
    Il faudrait donc avoir plusieurs tables liées par des FK pour les villes, les codes postaux, les édifices...
    Dans l'unique table, on trouve en PK l'édifice et en FK le membre ça signifie qu'un édifice est associé à un et un seul membre.
    Je serai curieux de connaître les règles de gestion ayant conduit à ce choix.

    Ensuite, les adresses françaises comme étrangères sont normées par la poste. Suivre cette norme est recommandé pour éviter les adresses incomplètes ou non utilisables. Cette norme est accessible gratuitement sur le web. Si on met tout en "nullable" on a éventuellement un code postal marqué "null" et une ville marquée "null", donc une adresse inutilisable !

    Enfin, le typage des données est une chose importante. Il ne faut pas utiliser systématiquement du varchar.
    Par exemple :
    • la notion d'"actif" est probablement à remplacer par un booléen ;
    • le code postal, s'il s'agit d'une adresse française, se code sur 5 caractères. Du char(5) fixe sera donc plus performant que du varchar ;
    • le numéro dans la rue devrait aussi être stocké dans du char fixe court, par exemple char(5) devrait suffire largement ;
    • le nom de la ville et de la rue doivent être stockés dans du varchar(38). Cf. là encore la norme de la poste.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur PDO pendant INSERT INTO
    Par Goldo974 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 11/08/2015, 17h14
  2. Erreur d'Insert into PDO
    Par Francisco22 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 04/04/2015, 01h19
  3. [MySQL] PDO insert into depuis un formulaire n'ecrit pas dans ma bdd
    Par petinico83 dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 30/12/2013, 17h51
  4. [PDO] PDO Insert Into
    Par pendoRa dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 19/01/2012, 16h01
  5. [PDO] PDO MySQL INSERT INTO rien ne s'insere.
    Par jano_dave dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 17/12/2009, 10h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo