Page 1 sur 2
Problème avec un UPDATE
Posté : 14 nov. 2021, 10:32
par Stu76
Bonjour à tous,
J'ai un problème avec un UPDATE qui ne fonctionne pas, je ne comprends pas pourquoi. Si quelqu'un pouvait regarder mon code ce serait super sympa.
Code : Tout sélectionner
$db =Database::connect();
$stmt= $db->prepare("UPDATE users SET date=:date WHERE email=:email");
$stmt->bindValue(':email',$mail, PDO::PARAM_STR);
$stmt->bindvalue(':date',$date, PDO::PARAM_STR);
$stmt->execute();
$stmt->closeCursor();
Les variables mail et date contiennent bien une valeur toutes les deux, j'ai bien entendu vérifié au préalable. Mais rien ne s'enregistre dans ma base. Je sais lire des données, insérer et supprimer. Mais impossible de faire une mise à jour de celles-ci !
À l'aide s'il vous plait, merci d'avance et bonne journée à tous
Re: Problème avec un UPDATE
Posté : 14 nov. 2021, 13:26
par or 1
afficher
echo "UPDATE users SET date='$date' WHERE email='$mail'";
l'exécuter dans phpmyadmin pour voir si cela provoque une erreur.
Re: Problème avec un UPDATE
Posté : 14 nov. 2021, 15:25
par @rthur
Également, active la gestion d'erreur PDO en WARNING ça aide pour débuguer :
https://www.php.net/manual/fr/pdo.error-handling.php
Re: Problème avec un UPDATE
Posté : 15 nov. 2021, 09:00
par Stu76
Bonjour à tous,
D'abord un tout grand merci de vous pencher sur mon problème.
Ma requête fonctionne correctement dans MySQL, j'avais testé aussi avant d'envoyer un message sur le forum. Par contre, je n'ai pas activé les message d'erreur pour PDO je vais tester et je reviens vers vous

Re: Problème avec un UPDATE
Posté : 15 nov. 2021, 09:20
par Stu76
Re,
@rthur, j'ai activé la gestion d'erreur PDO, malheureusement il me retourne aucune erreur

Re: Problème avec un UPDATE
Posté : 15 nov. 2021, 09:38
par Stu76
Je viens de faire encore une série de test et rien ne passe vers ma base de données. SAUF, quand je mets des valeurs directement dans la requête qui ce trouve dans ma page php. Là étrangement tout passe mais dès que je travaille en PDO ou autre plus rien de rentre à rien comprendre.
Re: Problème avec un UPDATE
Posté : 15 nov. 2021, 09:49
par Stu76
Quand je fais un print_r juste avant l'excute de ma variable $stmt voici ce qu'elle m'affiche
PDOStatement Object ( [queryString] => UPDATE users set date=:date WHERE email=:email )
Elle ne contient aucune valeur, est-ce normal svp ?
Re: Problème avec un UPDATE
Posté : 15 nov. 2021, 17:26
par ynx
Oui c'est normal que les valeurs ne s'affichent pas lorsqu'on affiche l'objet PDOStatement correspondant à la requête préparée.
A priori le problème viendrait des variables $mail et $date.
Que donne le test suivant ?
var_dump($mail);
var_dump($date);
$db = Database::connect();
$stmt= $db->prepare("UPDATE users SET date=:date WHERE email=:email");
$stmt->bindValue(':email', $mail, PDO::PARAM_STR);
$stmt->bindvalue(':date', $date, PDO::PARAM_STR);
$stmt->execute();
$stmt->debugDumpParams();
Re: Problème avec un UPDATE
Posté : 15 nov. 2021, 19:41
par Stu76
Bonsoir,
Merci du suivi, mes variables ont bien une valeur et c'est bien là le problème. Je m'arrache les cheveux car je ne comprends absolument pas pourquoi cette requête ne fonctionne pas

Re: Problème avec un UPDATE
Posté : 15 nov. 2021, 21:42
par Stu76
Re,
Voici le résultat de l'option debug
SQL: [52] UPDATE users set date = :date WHERE email = :email Sent SQL: [74] UPDATE users set date = 2021-11-15' WHERE email = '
[email protected]' Params: 2 Key: Name: [6] :email paramno=-1 name=[6] ":email" is_param=1 param_type=2 Key: Name: [6] :date paramno=-1 name=[6] ":date" is_param=1 param_type=2
Pour les variables var_dump elles retournent bien toutes les deux une valeur.
Re: Problème avec un UPDATE
Posté : 15 nov. 2021, 22:29
par or 1
set date = 2021-11-15'
cela marcherait mieux avec
set date = '2021-11-15'
quel est le retour exact de :
var_dump($date);
?
Re: Problème avec un UPDATE
Posté : 16 nov. 2021, 17:04
par Stu76
Salut Or1,
Il ne manque pas d'apostrophe à set date, c'est une erreur de manipulation de ma part (effacé par inadvertance).
var_dump($date); donne bien 2021-11-16, la date d'aujourd'hui vu que je viens de refaire le test à l'instant.
Re: Problème avec un UPDATE
Posté : 16 nov. 2021, 18:40
par or 1
et la sugestion d'Arthur, cela dit quoi ?
Re: Problème avec un UPDATE
Posté : 17 nov. 2021, 08:38
par Stu76
Je n'ai aucune erreur de retourner, je n'y comprend rien. Je vais vous envoyer mon code complet comme ça vous aurez une vue d'ensemble.
Merci pour votre aide
Re: Problème avec un UPDATE
Posté : 17 nov. 2021, 08:56
par Stu76
Re,
Afin que tout le monde voit plus claire, voici un exemple qui ressemble à mon code. Vous verrez que celui-ci ne retourne aucune erreur et que mes variables contiennent bien des valeurs. J'ai remplacé le champs date par un token, pour voir le changement à chaque rafraichissement plus simple et plus visuel.
Bien entendu, j'ai créé une table avec les bons champs et les bonnes valeurs.
Code : Tout sélectionner
<?php
require 'classes/core.php';
$dsn = 'mysql:dbname=testcode;host=localhost';
$user = 'root';
$password = '';
try {
$dbh = new PDO($dsn, $user, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo 'Échec lors de la connexion : ' . $e->getMessage();
}
$mail ='[email protected]';
$token = uniqid();
var_dump($mail);
var_dump($token);
$db =Database::connect();
$db->exec("SET CHARACTER SET utf8");
$stmt= $db->prepare('UPDATE users set token = :token WHERE email = :email');
$stmt->bindValue(":email",$mail,PDO::PARAM_STR);
$stmt->bindvalue(":token",$token,PDO::PARAM_STR);
$stmt->execute();
$stmt->debugDumpParams();
?>
<!DOCTYPE html>
<html lang="en">
<head>
<title>Récupération de votre psw</title>
</head>
<body>
<section id="cours">
<div class="container">
<div class="tprinc">
<h2>Page de test </h2>
</div>
<div class="white">
Page de test
</div>
</div>
</section>
</body>
</html>
Ce code ne fonctionne pas chez moi et je ne comprends pas pourquoi !!!! Il est pourtant basic et plus que rudimentaire.
Vous constaterez comme moi que les valeurs sont bien transmisses à la requête SQL, mais que celle-ci ne s'exécute pas car rien ne s'inscrit dans ma base de données.
Merci pour votre aide