8791 sujets

Développement web côté serveur, CMS

bonjour, je tente en vain de faire une insertion dans une base de données.

j'utilise PDO et ma connexion ne renvoie pas d'erreur (try - catch).

quand j'essaie de déboguer via des "echo" l'étape 3 ne s'affiche pas donc je suppose que le pb est au niveau de la requête préparée.

Pourriez vous me dire si j'ai un pb de syntaxe ou autre sur mon code car là je fais du sur place.

Merci d'avance pour votre aide.

echo 'Etape 1';
	$sql = "INSERT INTO T_customer(name, firstname, address1, address2, codepost, city, phone, mail) VALUES (:name, :firstname, :address1, :address2, :codepost, :city, [langue]hone, :mail)";
	echo 'Etape 2';
	try{
	$req = $bdd->prepare($sql);
	}catch(Exception $e){
    echo 'Erreur : '.$e->getMessage().'<br />';
	echo 'N° : '.$e->getCode();
	}
echo ''Etape 3";
	if(!$req){ echo 'FALSE';}
	$req->execute(array(
		'name'=>'test',
		'firstname'=>'test',
		'address1'=>'test',
		'address2'=>'test',
		'codepost'=>'97480',
		'city'=>'Saint Joseph',
		'phone'=>'0262565656',
		'mail'=>'test@test.fr'
	));


Leuco974
Modifié par leuco974 (08 Apr 2012 - 10:40)
Bonjour leuco974,

Je ne pense pas qu’il y ait des erreurs dans ta requête préparée.
Si "Etape 3" ne s’affiche pas, c'est qu'il y a un problème avec le "echo" : tu ouvres la chaine de caractères avec deux quotes et tu la fermes avec un guillemet.

Pour le problème d’insertion dans la base de données, je pense que cela provient du paramètre que tu passes à la méthode execute(). Les clés du tableau doivent commencer avec ":" comme les paramètres de ta requête préparée, ce qui donnerait :


$req->execute(array(
	':name'=>'test',
	':firstname'=>'test',
	':address1'=>'test',
	':address2'=>'test',
	':codepost'=>'97480',
	':city'=>'Saint Joseph',
	':phone'=>'0262565656',
	:'mail'=>'test@test.fr'
));


Bon courage
merci pour ton aide Jules-F,

au niveau du problème du "echo" c juste un pb lors de la rédaction de mon sujet au niveau du code il n'y a pas de soucis.

donc j'ai toujours un pb entre l'étape 2 et à l'étape 3 (en dehors de l' Echo).

Pour ce qui est des clés du tableau je te remercie j'avais un doute.

Cdt
Il va m’être difficile de t’aider plus sans informations supplémentaires.

Il faudrait vérifier la configuration du module PDO et de son driver pour MySQL.
Tu obtiendrais peut être également des messages d’erreurs bien utiles au développement en configurant PHP pour les afficher et en ajoutant un "error_reporting(E_ALL);" temporaire en début de ton script.
alors en fait j'aimerai appeler une fonction pour procéder à une insertion dans une table avec comme paramètre un array. Donc ce qui marchait pas au départ c'est que j'avais oublié de faire passer mon objet PDO à la fonction.

Maintenant que ce soucis est réglé c'est l'insertion qui déconne.

Pourtant j'ai mon array qui est bien passé en paramètre de ma fonction ( print_r() m'affiche bien le contenu de mon array).

voici donc mon code:

<?php function insertInt($bdd,$arInter){
	echo '<pre>';
  		print_r($arInter);
	echo '</pre>';
	$sql = "INSERT INTO T_customer(name, firstname, address1, address2, codepost, city, phone, mail) VALUES (:name, :firstname, :address1, :address2, :codepost, :city, [langue]hone, :mail)";
	$req = $bdd->prepare($sql);
	$req->execute(array(
		':name'=>$arInter['nameCustomer'],
		':firstname'=>$arInter['firstnameCustomer'],
		':address1'=>$arInter['addressCustomer'],
		':address2'=>$arInter['addressComp'],
		':codepost'=>$arInter['codepost'],
		':city'=>$arInter['city'],
		':phone'=>$arInter['phone'],
		':mail'=>$arInter['mail']));
return TRUE;
}
?>

Modifié par leuco974 (08 Apr 2012 - 13:26)
Après ton $req->execute(…), essaye d’afficher un message d’erreur avec le code :
print_r($req->errorInfo());


Ça nous donnera peut-être un indice précieux afin de résoudre ce problème.
Je ne vois pas d’erreur de syntaxe, mais c’est pas toujours facile de trouver quand on ne manipule pas le code.

Peut-être que la méthode debugdumpparams va pouvoir d’informer de ce qui se passe :
http://www.php.net/manual/fr/pdostatement.debugdumpparams.php

Sinon, faut absolument configurer PHP pour afficher les messages d’erreurs (sur la plate-forme de développement), c’est étonnant qu’il n’en affiche pas si quelque chose plante.

Es-tu certains du schéma de ta table T_customer ?
merci Jules-F mon problème venait que la variable stockée dans l'array de départ. J'ai, comme tu l'as suggéré, activé l'affichage des messages d'erreur dans le fichier de config de php et j'ai pu voir le pb.

Thanks

Leuco974