utilisation de marqueurs PDO::prepare

Petit nouveau ! | 1 Messages

21 déc. 2011, 01:19

Bonjour, totalement novice, je me permet de venir vers vous pour m'aider a comprendre l'utilisation des marqueurs.

Je realise un TP que je n'ai pas eu le temps de finir en cours, il s'agit d'un frontend pour un site de gestion d'offres d'emploi.

La requete suivante fonctionnait tres bien avant que je remarque qu'il fallait utiliser des marqueurs (?)
Je ne sais pas si j'ai un probleme de syntaxe ou d'ignorance ou les deux
	$queryinsert = $db->prepare("INSERT INTO gcv_candidatures(id_type_contrat, id_offre_emploi, nom, prenom, adresse, telephone, email, age, situation_famille, formation, experience, aptitudes, motivations, divers, date_saisie, date_modification) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
	$queryinsert->bindParam(1, $_POST[type_contrat]);
	$queryinsert->bindParam(2, $_POST[id_offre]);
	$queryinsert->bindParam(3, $_POST[nom]);
	$queryinsert->bindParam(4, $_POST[prenom]);
	$queryinsert->bindParam(5, $_POST[adresse]);
	$queryinsert->bindParam(6, $_POST[telephone]);
	$queryinsert->bindParam(7, $_POST[email]);
	$queryinsert->bindParam(8, $_POST[age]);
	$queryinsert->bindParam(9, $_POST[situation_famille]);
	$queryinsert->bindParam(10, $_POST[formation]);
	$queryinsert->bindParam(11, $_POST[experience]);
	$queryinsert->bindParam(12, $_POST[aptitudes]);
	$queryinsert->bindParam(13, $_POST[motivations]);
	$queryinsert->bindParam(14, $_POST[divers]);
	$queryinsert->bindParam(15, $date_jour);
	$queryinsert->bindParam(16, $date_jour);
    $queryinsert->execute();
Merci pour votre regard aguerri :)

ViPHP
ViPHP | 2577 Messages

21 déc. 2011, 10:03

Bonjour,

Je ne connais pas la syntaxe de ce que tu utilises pour faire ton accès à la base de données, ni d'ailleurs la base utilisée. A priori, il doit exister un moyen de connaitre l'erreur via une fonction ou un variable. Dans le cas de msql, c'est les fonctions mysql_error() et mysql_errno().

En général, il est bien de vérifier la bonne exécution des requetes en testant un code retour ou avec des try/catch.

Tu peux essayer PDO::errorCode() et PDO::errorInfo() (voir doc http://www.php.net/manual/fr/pdo.error-handling.php)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

21 déc. 2011, 11:27

salut,

pour compléter l'info il faut utiliser http://www.php.net/manual/fr/pdo.errorinfo.php. cette méthode retourne un tableau, l'index deux contient le message d'erreur.

tu devrais indiquer les 3ème paramètre de bindvalue http://www.php.net/manual/fr/pdostatement.bindvalue.php

pourquoi une requête préparée ? c'est donc un boucle cette requête ? si ce n'est pas le cas une requête classique suffit avec utilisation de PDO::quote. (bien penser à indiquer aussi le type de paramètre).

quel ton niveau d'erreur de php ? s'il n'est pas à E_ALL|E_STRICT modifie le en conséquence, je vois 14 erreurs dans ton code !!!! (je suppose que tu n'as pas définie 14 constantes pour les nom des index du tableau $_POST ?).

tu peux aussi activer le report d'erreur de PDO pour qu'il lève une exception (a traiter avec try / catch)
$db->setAttribut(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

@+
Il en faut peu pour être heureux ......