OVH Cloud OVH Cloud

Insertion de valeurs

6 réponses
Avatar
- = Cyriloch = -
Bonsoir à tous,

L'insertion de données avec une requête du type "INSERT INTO Table SET
Champs = $Valeur" est elle possible et le cas échéant conseillée ?
Mon idée étant d'avoir une seule requête pour insérer ou mettre à jour,
suivant les cas, quelque chose du type :

if(isset($ID))
{
$Action = 'UPDATE';
$Where = "WHERE ID = '$ID'";
}
else
{
$Action = 'INSERT INTO';
}

//

$Requete = "$Action $Table SET ";
$Requete .= "ChampsNoms[$i] = ChampsValeurs[$i]";
$Requete .= "$Where";

Merci de vos conseils,

Cyriloch

6 réponses

Avatar
Clifden
Bonsoir à tous,

L'insertion de données avec une requête du type "INSERT INTO Table SET
Champs = $Valeur" est elle possible et le cas échéant conseillée ?
Mon idée étant d'avoir une seule requête pour insérer ou mettre à jour,
suivant les cas, quelque chose du type :

if(isset($ID))
{
$Action = 'UPDATE';
$Where = "WHERE ID = '$ID'";
}
else
{
$Action = 'INSERT INTO';
}

//

$Requete = "$Action $Table SET ";
$Requete .= "ChampsNoms[$i] = ChampsValeurs[$i]";
$Requete .= "$Where";

Merci de vos conseils,

Cyriloch


A ma connaissance la syntaxe du INSERT n'est pas celle là. Par contre,
tu peux faire quelque chose du type

function insert($table,$tab) {
$fields=array_keys($tab);
$values=array_values($tab);
// ensuite construire la requete $sql avec $table,$fields,$values
...
}

function update($table,$tab,$where) {
$fields=array_keys($tab);
$values=array_values($tab);
// ensuite construire la requete $sql avec $table,$fields,$values, $where
...

}

tu as ensuite ton bout de code à toi qui appelle l'une ou l'autre des
fonctions:
$champs=array();
for ($i=0;$i<count($champsNoms);$i++)
$champs[$champsNoms[$i]]=$ChampsValeurs[$i];
if(isset($ID))
{
update($Table,$champs,$Where);
}
else
{
insert($Table,$champs);
}


C'est un petit peu long car je suis parti de ta situation à toi:
tableaux champsNom et champsValeur. Mais tu as peut-être interet à
obtenir directement un tableau associatif contenant clés et valeurs.

Avatar
Sebastien Bourgasser
- = Cyriloch = - wrote:
Bonsoir à tous,

L'insertion de données avec une requête du type "INSERT INTO Table SET
Champs = $Valeur" est elle possible et le cas échéant conseillée ?


Bonjour,

Peut-être devriez vous éviter INSERT et UPDATE et plutôt utiliser
REPLACE qui fera l'update ou l'insert en fonction de vos paramètres
(avec MySQL, vous n'avez pas précisé quel type de DB vous utilisez) ? Il
vous faut au moins un champ indéxé (je pense que votre champ ID doit l'être)

A+

--
Séb

Avatar
Antoun
Clifden wrote:

Bonsoir à tous,

L'insertion de données avec une requête du type "INSERT INTO Table SET
Champs = $Valeur" est elle possible et le cas échéant conseillée ?
Mon idée étant d'avoir une seule requête pour insérer ou mettre à
jour, suivant les cas, quelque chose du type :




A ma connaissance la syntaxe du INSERT n'est pas celle là.


Si, cette syntaxe est une extension de MySQL à la syntaxe classique de
INSERT. Le but est très exactement ce pour quoi Clifden l'utilise, à
savoir garder la même requête en faisant varier l'instruction entre
UPDATE et INSERT INTO.

Clifden, tu peux y aller, tant que tu te souviens que cela ne marche
qu'avec MySQL.

Antoun


Avatar
Antoun
Peut-être devriez vous éviter INSERT et UPDATE et plutôt utiliser
REPLACE qui fera l'update ou l'insert en fonction de vos paramètres
(avec MySQL, vous n'avez pas précisé quel type de DB vous utilisez) ? Il
vous faut au moins un champ indéxé (je pense que votre champ ID doit
l'être)


L'inconvénient du REPLACE est que ce n'est pas un UPDATE, mais un DELETE
suivi d'un INSERT. Autrement dit, les valeurs de toutes les colonnes non
précisées dans le REPLACE sont effacées.

Avatar
Antoun
euh, quand je dis Clifden, lisez Cyriloch ;-)
Avatar
- = Cyriloch = -
euh, quand je dis Clifden, lisez Cyriloch ;-)


Merci à tous en tout cas