Requete SQL

Petit nouveau ! | 3 Messages

20 févr. 2019, 12:34

Bonjour,

J'ai du faire un erreur nul mais je la vois pas.
Voilà mon erreur : Uncaught Error: Call to a member function execute() on bool

Code : Tout sélectionner

$con = dbConnectTest(); $req = $con->prepare('SELECT * FROM web WHERE id = :id'); $req->execute(array('id'=>$_GET['id'])); $data = $req->fetch();
Merci d'avance,
MydroX

Avatar du membre
Mammouth du PHP | 1609 Messages

20 févr. 2019, 12:47

Salut, le message d'erreur te dit que tu essaies d'appeler la fonction execute() sur un booléen.
Je suppose donc que le prepare n'arrive pas à préparer la requête étant donné que $req doit être égale à FALSE.

Comme tu peux voir sur la documentation ici http://php.net/manual/fr/pdo.prepare.php, dans le paragraphe "Valeurs de retour":
Si le serveur de base de données ne réussit pas à préparer la requête, PDO::prepare() retourne FALSE ou émet une exception...

Tu peux tenter un
print_r($con->errorInfo()); 
pour avoir plus d'informations sur l'erreur (à placer évidemment après le $con->prepare()) mais je ne suis pas sur que la méthode prepare génère une erreur récupérable avec la méthode errorInfo.
Développeur web depuis + de 20 ans

Petit nouveau ! | 3 Messages

20 févr. 2019, 13:03

Undefined method errorInfo(); je comprend plus rien

Mammouth du PHP | 2703 Messages

20 févr. 2019, 14:26

on peut avoir le contenu de dbConnectTest() ?

Petit nouveau ! | 3 Messages

20 févr. 2019, 15:42

Code : Tout sélectionner

function dbConnectTest() { $con = mysqli_connect('localhost', 'root', '', 'portfolio-iesa'); mysqli_set_charset($con, 'utf-8'); return $con; }

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

20 févr. 2019, 17:55

Salutations !

Tu mélanges le mode procédurale de mysqli et le mode orienté objet. Si tu utilises mysqli_connect() pour te connecter à la base de données il faudrait utiliser mysqli_prepare() en passant l'identifiant retourné par mysqli_connect() en paramètre. Idem pour execute() et fetch().

Si tu veux utiliser la programmation objet, alors dans ta fonction dbConnectTest, il faudrait faire un $con = new mysqli(...) et $con->set_charset("utf8").

Dans tous les cas, tu peux tester si la connexion a réussit avec mysqli_connect_errno().
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...