requète INSERT
Le problème exposé dans ce sujet a été résolu.
Bonsoir ![:)](/static/smileys/smile.png)
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 ![;)](/static/smileys/clin.png)
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