Bonjour,
J'ai un code qui fonctionne très bien sur php 7.4 mais suite au changement à la version 8.0
il me mets une Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in PDOStatement->execute(Array)
Voici le code
et le code de require "require/connet_bdd.php
Et comme j'ai pas trop suivie l'évolution de PHP 8.0 et maintenant PHP 8.1
Merci de votre contribution.
Modifié par ricem (30 Mar 2022 - 19:48)
J'ai un code qui fonctionne très bien sur php 7.4 mais suite au changement à la version 8.0
il me mets une Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in PDOStatement->execute(Array)
Voici le code
<?php
require "require/connet_bdd.php"; //Connexion à la base de données
// ÉTAPE 1 : on vérifie si le pseudo se trouve déjà dans la table.
// Pour faire ça, on n'a qu'à compter le nombre d'entrées dont le champ "pseudo" le pseudo du visiteur.
$reqpseudo = $bdd->prepare('SELECT pseudo AS existe_pseudo FROM connect_chat WHERE pseudo= ?');
$reqpseudo->execute(array($_SESSION['pseudo']));
$pseudoExist = $reqpseudo->fetch();
if ($pseudoExist == 0) // Le pseudo ne se trouve pas dans la table, on va l'ajouter.
{
$verif = $bdd->prepare('INSERT INTO connect_chat (pseudo, timestamp) VALUES (?, ?)');
$verif->execute(array($_SESSION['pseudo'], time()));
}
else // Le pseudo se trouve déjà dans la table, on met juste à jour le timestamp.
{
$verif = $bdd->prepare('UPDATE connect_chat SET timestamp="'.time().'" WHERE pseudo="'.$_SESSION['pseudo'].'"');
$verif->execute(array($_SESSION['pseudo']));
}
// ÉTAPE 2 : on supprime toutes les entrées dont le timestamp est plus vieux que 2 minutes.
// On stocke dans une variable le timestamp qu'il était il y a 1 minutes :
$timestamp_min = time() - (60*2); // nombre en secondes par minute * par nombre de minute
$bdd->query('DELETE FROM connect_chat WHERE timestamp<"'.$timestamp_min.'"');
// ÉTAPE 3 : on compte le nombre de pseudo stockées dans la table. C'est le nombre de visiteurs connectés.
$retour = $bdd->query('SELECT GROUP_CONCAT(pseudo SEPARATOR ", ") FROM connect_chat')->fetchAll();
$utilisateur = htmlspecialchars($retour[0][0]);
// Ici on compte le nombre d'utilisateur connecté à la ChatBox
$retour = $bdd->query('SELECT COUNT(*) AS existe_pseudo FROM connect_chat');
$donnees = $retour->fetch();
$compter = $donnees['existe_pseudo'];
?>
et le code de require "require/connet_bdd.php
<?php
// Connexion à la base de données
try
{
$bdd = new PDO('mysql:host=localhost;dbname=mon-site-test;charset=utf8', 'root', '');
array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
?>
Et comme j'ai pas trop suivie l'évolution de PHP 8.0 et maintenant PHP 8.1
Merci de votre contribution.
Modifié par ricem (30 Mar 2022 - 19:48)