Partage
  • Partager sur Facebook
  • Partager sur Twitter

Préparation requête ?

26 août 2019 à 0:18:40

Bonjour,

J'essaye de comprendre la préparation des requêtes mysql mais j'obtiens des erreurs, je ne sais pas où j'ai foiré.

Le script sans la préparation :

$sql = "
UPDATE Comptes_Utilisateurs SET Mot_de_Passe ='" . md5($clef_activation) . "'
WHERE Adresse_Email = '" . $_POST["TB_Adresse_Email"] . "'
";
						
$result = $con_base->query($sql);

if(!$result)
{
$message = "Erreur d'accès à la base de données lors de la création du compte utilisateur";
}



Le script que j'ai essayé mais qui ne fonctionne pas

$TB_Adresse_Email = $_POST["TB_Adresse_Email"];
	
$result = $con_base->prepare("UPDATE Comptes_Utilisateurs SET Mot_de_Passe ='" . md5($clef_activation) . "'
WHERE Adresse_Email = ?");
$result->execute($TB_Adresse_Email);

if(!$result)
{
$message = "Erreur d'accès à la base de données lors de la création du compte utilisateur";
}


Pourriez-vous m'aider à comprendre mon erreur ?

-
Edité par davidkings 26 août 2019 à 0:20:20

  • Partager sur Facebook
  • Partager sur Twitter
26 août 2019 à 1:45:46

Bonjour,

afin de préparer une requête, tu dois avoir instancié PDO, il suffit de le faire comme ceci :

$host = 'localhost';
$db = 'database';
$user = 'root';
$password = 'root';

	try
	{
		$bdd = new PDO('mysql:host='.$host.';dbname='.$db, $user, $password);
		array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);
	}
	catch (PDOException $e)
	{
	        die('Erreur : ' . $e->getMessage());
	}

PDO est un objet qui peut utiliser plusieurs paramètres pour te retourner des erreurs.
En l'occurence, le paramètre ATR_ERRMODE renverra toutes les exceptions. Ce sera plus simple de comprendre d'où vient le problème s'il y en a un.

Je te conseil de mettre ce code dans un fichier "db.php" que tu mettras dans un répertoire protégé par un fichier htaccess ou non accessible par les utilisateurs. Il te suffira ensuite de faire appel au fichier avec un require).

ensuite, il te suffit de préparer ta requête comme ceci:

$query = $bdd->prepare("SELECT * FROM ma_table WHERE id = :id, name = :name");
$query->execute([":id" => $id_utilisateur, ":name" => $name]);


le ":id" est un paramètre auquel tu lie une variable lors de l'exécution de ta requête.

Il existe aussi une variante avec des paramètres anonymes tel que :

$query = $bdd->prepare("SELECT * FROM ma_tabble WHERE id = ?, name = ?");
$query->bind_param($id, $name);
$query->execute();



personnellement j'ai l'habitude d'utiliser les paramètres avec le suffixe ":" mais les deux fonctionnent parfaitement.

En espérant avoir pu t'aider!

-
Edité par Neberith 26 août 2019 à 1:48:56

  • Partager sur Facebook
  • Partager sur Twitter

La culture, c'est comme la confiture: moins on en a, plus on l'étale.

26 août 2019 à 12:53:54

Merci beaucoup, je vais essayer

Edit : ça ne marche pas, il doit y avoir une erreur de syntaxe unexpected '[', expecting ')' ligne 2 de ton code avec ":"

-
Edité par davidkings 27 août 2019 à 10:16:36

  • Partager sur Facebook
  • Partager sur Twitter
1 septembre 2019 à 17:42:57

Salut!

Désolé pour la réponse si tardive.

Quelle version de PHP utilises-tu?

Les "[" "]" sont l'équivalent de la fonction "array()" pour passer les paramètres de ta requête dans un tableau.

Essais de cette façon alors :

$query = $bdd->prepare("SELECT * FROM ma_table WHERE id = :id, name = :name");
$query->execute(array(":id" => $id_utilisateur, ":name" => $name));
  • Partager sur Facebook
  • Partager sur Twitter

La culture, c'est comme la confiture: moins on en a, plus on l'étale.