Fatal error: Cannot pass parameter 2 by reference avec pdo-sqlyte

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Fatal error: Cannot pass parameter 2 by reference avec pdo-sqlyte

par zeus » 29 févr. 2008, 16:56

Modération :
Puisque ta question est résolue, j'ajoute le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.

Tu peux réaliser cette opération toi-même
en cliquant sur le bouton Image qui s'affiche en haut à gauche de ce sujet
si tu as posté le 1er message en tant que membre (inscrit et identifié).

Alors... inscris-toi !!! ;)

De plus, si tu as une autre question ouvre un nouveau sujet,
cela te permettra d'avoir plus de réponses.

par Nounet » 29 févr. 2008, 15:18

Tout a fait zeus.
Mon premier champ IdClient est auto incrementré et represente bien une clef primaire.Donc ,grace a vous je vais tester le code suivant:
$oConnection=new PDO('sqlite:./Db/MyDb.db');
		   	$oPDOStatement=$oConnection->prepare("INSERT INTO ".NOM_TABLE_CLIENT." (TypeDemande,DesignationClient,MailClient,TelClient) VALUES (?,?,?,?)");
			$oPDOStatement->bindValue(1,'Contact Email');
			$oPDOStatement->bindValue(2,$aData['Nom-Prenom']);
			$oPDOStatement->bindValue(3,$aData['Email']);
			$oPDOStatement->bindValue(4,$aData['Telephone']);
			$oPDOStatement->execute();
			$oConnection=NULL;
Je l'ai testé et cela marhe maintenant ,vraiment un grand merci a vous !!!

D'autre part,j'avais inseré des caracteres accentués dans ma base .Seulement ceci apparaisse mal une fois affiché dans ma page html.J'ai lu plusieurs choses sur le net comme quoi sqlyte ne pouvait les gerer.Est ce vrai?n'y a t'il pas un moyen de controuner le probleme ??

par zeus » 29 févr. 2008, 12:53

Je pense que la colonne "id_client" est une clé primaire, surement auto-incrémentée. Je pense même que tu voudrais laisser Sqlite remplir ce champ.

Vrai ?

Si c'est vrai, il ne faut pas que tu l'indiques dans ton INSERT (ni la colonne, ni la valeur)

par Jules Petibidon » 29 févr. 2008, 12:53

Hello,

PDO::bindParam() crée une référence sur une variable, ce qui pose un petit problème de logique lorsque tu lui passe une constante (qui par définition n'est pas une variable) ou une valeur (j'imagine que c'est ce que tu as fait dans ton second test ?)

Tu dois pouvoir contourner ce problème en passant comme ceci :
$truc = MA_CONSTANTE;
$pdo->bindParam( 2 , $truc );
Ou sinon, plus intéressant, PDO::bindValue est plus ou moins fait pour ça :
$pdo->bindValue( 2 , MA_CONSTANTE );

Fatal error: Cannot pass parameter 2 by reference avec pdo-s

par nounet » 29 févr. 2008, 12:11

Bonjour a tous
Comme son sujet l'indique j'ai une erreur concernant une insertion dans une bars de donnée avec pdo
define('TYPE_DEMANDE_CONTACT','Contact Email');


try{
			$oConnection=new PDO('sqlite:./Db/MyDb.db');
		   	$oPDOStatement=$oConnection->prepare("INSERT INTO ".NOM_TABLE_CLIENT." (IdClient,TypeDemande,DesignationClient,MailClient,TelClient) VALUES (?,?,?,?,?)");
			$oPDOStatement->bindParam(1,'');
			$oPDOStatement->bindParam(2,TYPE_DEMANDE_CONTACT);
			$oPDOStatement->bindParam(3,$aData['Nom-Prenom']);
			$oPDOStatement->bindParam(4,$aData['Email']);
			$oPDOStatement->bindParam(5,$aData['Telephone']);
			$oPDOStatement->execute();
			$this->oConnection=NULL;
			}
			catch (PDOException $e){
				echo 'erreur'.$e->getMessage();
			}
J'ai bien essayé dans mon Bind Param de na pas utiliser ma constante defini mais le probleme persiste .Quelqu'unaurait dejat'il eu ce probleme?merci d'avance