requète INSERT
Le problème exposé dans ce sujet a été résolu.
Bonsoir
c'est étrange, car j'ai une requete INSERT, qui ne marche pas (ma table ne se modifie pas), mais le plus étrange, c'est que je n'ai pas d'erreurs o.O .
voici mon code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 | $req = $bdd->prepare('SELECT * FROM vues WHERE mail = :mail');
$req->bindValue(':mail', $mail,PDO::PARAM_STR);
$req->execute();
$nb = "";
while($enregistrement = $req->fetch())
{
echo $mail . $site . $time;
if ($enregistrement['time'] == $time)
{
echo $mail . $site . $time;
if (empty($enregistrement['nb']))
{
//insert
echo $mail . $site . $time;
$rq = $bdd->prepare("INSERT INTO vues(mail, url, time) VALUES(:mail, :url, :time)");
$rq->bindValue(':mail', $mail,PDO::PARAM_STR);
$rq->bindValue(':url', $site,PDO::PARAM_STR);
$rq->bindValue(':time', $time,PDO::PARAM_STR);
$rq->execute();
}
else
{
//update
$nb = $enregistrement['nb'];
$nb++;
$re = $bdd->prepare("UPDATE vues SET nb = :nb WHERE mail = :mail AND url = :url AND time = :time");
$re->bindValue(':nb', $nb,PDO::PARAM_STR);
$re->bindValue(':mail', $mail,PDO::PARAM_STR);
$re->bindValue(':time', $time,PDO::PARAM_STR);
$re->bindValue(':url', $site,PDO::PARAM_STR);
$re->execute();
}
}
}
|
et autre étrangerie (ça se dit ? )
c'est les :
| echo $mail . $site . $time;
|
celui dans le dernier if ne marche que si il y en a dans les if et while parent o.O
savez vous résoudre ces bugs ?
cordialement
Vérifie la valeur de ta variable $enregistrement['nb']
.
echo $mail . $site . $time;
Pour débugger, je te conseille de faire deux choses :
- lorsque tu crées ta connexion (
new PDO
), ajoute la ligne suivante : $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
, si erreur il y a, cela déclanchera une exception, te facilitant le travail
- plutôt que d'utiliser des echo, utilise
var_dump
, ce qui donnerait, ce code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 | <?php
$req = $bdd->prepare('SELECT * FROM vues WHERE mail = :mail');
$req->bindValue(':mail', $mail,PDO::PARAM_STR);
$req->execute();
$nb = "";
while($enregistrement = $req->fetch())
{
var_dump( $mail, $site, $time, $enregistrement['time']) ;
if ($enregistrement['time'] == $time)
{
if (empty($enregistrement['nb']))
{
//insert
echo $mail . $site . $time;
$rq = $bdd->prepare("INSERT INTO vues(mail, url, time) VALUES(:mail, :url, :time)");
$rq->bindValue('mail', $mail,PDO::PARAM_STR);
$rq->bindValue('url', $site,PDO::PARAM_STR);
$rq->bindValue('time', $time,PDO::PARAM_STR);
$rq->execute();
}
else
{
//update
$nb = $enregistrement['nb'];
$nb++;
$re = $bdd->prepare("UPDATE vues SET nb = :nb WHERE mail = :mail AND url = :url AND time = :time");
$re->bindValue('nb', $nb,PDO::PARAM_STR);
$re->bindValue('mail', $mail,PDO::PARAM_STR);
$re->bindValue('time', $time,PDO::PARAM_STR);
$re->bindValue('url', $site,PDO::PARAM_STR);
$re->execute();
}
}
}
|
Nota, j'ai enlevé les ":" dans les bindvalue car c'est considéré comme "salle" de les mettre.
bonjour,
merci de vos réponses
en fait, c'était du a une erreur algorithmique de ma part .
en fait, j'attendait que le code du dernier if s’exécute, alors que c'est impossible
finalement mon code est :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 | $req = $bdd->prepare('SELECT * FROM vues WHERE mail = :mail');
$req->bindValue(':mail', $mail,PDO::PARAM_STR);
$req->execute();
$nb = "";
$vue = 0;
while($enregistrement = $req->fetch())
{
if ($enregistrement['time'] == $time)
{
$vue = 1;
if (!empty($enregistrement['nb']))
{
//update
$nb = $enregistrement['nb'];
$nb++;
$re = $bdd->prepare("UPDATE vues SET nb = :nb WHERE mail = :mail AND url = :url AND time = :time");
$re->bindValue('nb', $nb,PDO::PARAM_STR);
$re->bindValue('mail', $mail,PDO::PARAM_STR);
$re->bindValue('time', $time,PDO::PARAM_STR);
$re->bindValue('url', $site,PDO::PARAM_STR);
$re->execute();
}
}
}
if ($vue == 0)
{
//insert
$rq = $bdd->prepare("INSERT INTO vues(mail, url, time) VALUES(:mail, :url, :time)");
$rq->bindValue('mail', $mail,PDO::PARAM_STR);
$rq->bindValue('url', $site,PDO::PARAM_STR);
$rq->bindValue('time', $time,PDO::PARAM_STR);
$rq->execute();
}
|
et j'utilisait déjà les erreurs
cordialement
Etant donné que le mail est unique avec ça, tu pouvais avantageusement remplacer ton while/if par un simple if/else :
| if ($enregistrement = $req->fetch()) {
// existant => update
} else {
// inexistant => insert
}
|
MySQL ? Si mail est en contrainte unique, pouvait pas simplement faire ça en une requête (INSERT … ON DUPLICATE KEY UPDATE …) ?
HS : si c'est résolu, merci d'indiquer le sujet comme tel
re,
résolu donc
non, car j'ai plusieurs dates a vérifié
nop :/
cordialement
Connectez-vous pour pouvoir poster un message.
Connexion
Pas encore membre ?
Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte