Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

php - mySQL probleme d'insertion

6 réponses
Avatar
azebic
Bonjour,
heuh, je vais essayer d'expliquer mon problème :-)
Soit une classe "User" qui doit se charger decréation d'un objet user.
Cette classe possede les "variables membres"
pas exemple:
var $nom;
var $prenom;

un certain moment je veux faire une insertion dans une BD mySQL en
faisant quelque chose du genre:
$requete = "insert into TABLE values ($this -> nom, $this -> prenom)"
$db = new DB;
$db -> insert($requete);
/*DB est une classe qui crée un objet DB qui fait la connexion avec
la BD et autre choses, entre autre insertions dans une BD */
Evidemment le code a haut ne marche pas car les caracteres d'echapement
ne sont pas corrects.
J'ai besoin un truc du genre
$requete = "insert into table values(" .$this -> nom. "," .$this ->
prenom.")");
Mais malheureusement ca non plus ca ne marche pas. J'ai le message
suivant qui s'affiche:
Parse error: parse error, unexpected T_OBJECT_OPERATOR in
/Library/Apache2/htdocs/Users.php on line 80
Donc mon probleme est la concatenation de chaines.
Quelqun a une solution a mon probleme ou un site web comme pointeur.

Merci


ADI

6 réponses

Avatar
Marc Quinton
wrote:
Bonjour,
heuh, je vais essayer d'expliquer mon problème :-)
Soit une classe "User" qui doit se charger decréation d'un objet user.
...

un certain moment je veux faire une insertion dans une BD mySQL en
faisant quelque chose du genre:
$requete = "insert into TABLE values ($this -> nom, $this -> prenom)"


tout cet ensemble de classes se presente plutot bien.
cela etant dit, tu dois gerer une requete qui ressemble a cela :

insert into TABLE values ("nom", "prenom")

* attention aux quotes, ou doubles suivant la base de données.
* tu peux utiliser sprintf ; ex : sprintf("insert into ... (..., '%s')", $this->nom);

Avatar
dmetzler
alors j'ai essayé avec ta syntaxe, et pour moi ça renvoit pas le
même message d'erreur : il y a une parenthèse en trop à la fin de ta
ligne.

Sinon je viens d'apprendre qu'on peut mettre des espaces autour de
l'opérateur -> (en fait j'avais jamais essayé et je pensais que le
problème venait de là).

Voilà le code que j'ai fait pour tester :

<?php

class test {
var $nom;
var $prenom;

function test($nom,$prenom) {
$this -> nom = $nom;
$this -> prenom = $prenom;
}

function getRequete() {
$requete = "insert into table values(" .$this -> nom. ","
.$this -> prenom.")";
return $requete;
}

}


$t = new test("toto","titi");
print $t->getRequete()."n";

?>
Avatar
ftc
<?php

class test {
var $nom;
var $prenom;

function test($nom,$prenom) {
$this -> nom = $nom;
$this -> prenom = $prenom;
}

function getRequete() {
$requete = "insert into table values(" .$this -> nom. ","
.$this -> prenom.")";
return $requete;
}

}


Vire les espaces entre $this et les attributs: $this->nom etpas $this -> nom

Avatar
dmetzler
Oui je sais, je n'en met pas d'habitude. A priori, -> est considéré
comme un opérateur par l'interpréteur et donc rien n'empêche de
mettre des espaces autour. D'ailleurs, ça marche (tm). C'est la même
différence entre 2+2 et 2 + 2

Tu remarqueras quand même que dans mon message je dis bien que je ne
suis pas habitué à mettre des espaces. Dans l'exemple, j'en ai mis
pour faire comme azebic.
Avatar
ftc
Oui je sais, je n'en met pas d'habitude. A priori, -> est considéré
comme un opérateur par l'interpréteur et donc rien n'empêche de
mettre des espaces autour. D'ailleurs, ça marche (tm). C'est la même
différence entre 2+2 et 2 + 2

Tu remarqueras quand même que dans mon message je dis bien que je ne
suis pas habitué à mettre des espaces. Dans l'exemple, j'en ai mis
pour faire comme azebic.


L'erreur est bien: unexpected T_OBJECT_OPERATOR in
/Library/Apache2/htdocs/Users.php on line 80 qui correspond bien au
sigle -> qui n'est pas attendu à l'endroit ou il se trouve. Donc ligne
80, tu fais appel à -> à un endroit ou il n'a rien a faire.

Un petit error_reporting( E_ALL ) en début de script t'apprendra peut
être un peu plus du genre variable non définie ou contante non existante ...

Avatar
dmetzler
J'ai bien remarqué le message d'erreur et c'est pour ça qu'au début,
je pensais que ça venait des espaces.

J'ai testé le programme ci-dessus avec ma version de PHP (5.0.3) et
avec les espaces : ça fonctionne sans problème. Lorsque je poste du
code simple, j'ai tendance à toujours le tester (ou alors je signale
que j'ai pas testé). Quand j'ai copié/collé le code proposé, j'ai
eu l'erreur "Parse error: syntax error, unexpected ')' ". Peut être
que le unexpected T_OBJECT_OPERATOR vient d'autre part (ou qu'une autre
version de PHP ne supporte pas cette syntaxe)

De plus comme je l'ai expliqué le symbole -> est un opérateur et il
n'est nulle part spécifié dans la documentation que les opérateurs
ne doivent pas avoir d'espace avant ou après. En revanche, il est vrai
qu'il est de coutume de ne pas en mettre pour cet opérateur ci.