ERREUR SQL EN PHP

Par merciful, il y a 5 ans


Bonjour les amis,

Voila je rencontre un petit problème avec mon code.
voici l'erreur
Erreur fatale : PDOException non interceptée: SQLSTATE [HY000]: Erreur générale: 1 jeton non reconnu,
J'ai passe toute la journee sans rien trouver de concret

Ce que je fais

Décrivez ici votre code ou ce que vous cherchez à faire
Voici le code

<?php use App\NumberHelper; define('PER_PAGE', 20); require 'vendor/autoload.php'; $pdo = new PDO("sqlite:./data.sql",null,null,[ PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION ]); $query = "SELECT * FROM products"; $queryCount = "SELECT COUNT(id) as count FROM products"; $params =[]; //recherche par ville if(!empty($_GET['q'])){ $query.= " WHERE city LIKE :city"; $params['city']='%'.$_GET['q'] .'%'; } //Pagination $page =(int)($_GET['p'] ?? 1); $offset =($page-1) * PER_PAGE; $query .= " LIMIT " .PER_PAGE."OFFSET $offset"; $statement = $pdo->prepare($query); $statement->execute($params); $products =$statement->fetchAll(); $statement = $pdo->prepare($queryCount); $statement->execute($params); $count = (int)$statement->fetch()['count']; $pages = ceil($count/PER_PAGE); ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="bootstrap.min.css"> <title>Biens immobiliers</title> </head> <body class="p-4"> <h1>Les biens immobiliers</h1> <form action="" class="mb-4"> <div class="form-group"> <input type="text" class="form-control" name="q" placeholder="Rechercher par ville" value="<?= htmlentities($_GET['q']?? null)?>"> </div> <button class="btn btn-primary">Recherche</button> </form> <table class="table table-striped"> <thead> <th>ID</th> <th>Nom</th> <th>Prix</th> <th>Ville</th> <th>Adresse</th> </thead> <tbody> <?php foreach($products as $product):?> <tr> <td><?= $product['id']?></td> <td><?$product['name']?></td> <td><?=Numberhelper::price($product['price']);?>$</td> <td><?=$product['city']?></td> <td><?=$product['address']?></td> </tr> <?php endforeach?> </tbody> </table> <?php if($pages >1 ):?> <a href="?p=<?=$page + 1?>" class="btn btn-primary">Page suivante</a> <?php endif ?> </body> </html>

Merci d'avance

5 réponses

Carouge10, il y a 5 ans

Bonjour,
1ère fois que je vois cela.
Par contre il manque un espace devant OFFSET
Et l'erreur viens de quelle requête ? car pour la querycount, tu essayes de passer le tableau $params en paramètre mais en sois, elle n'a pas besoin d'être préparer vu que tu n'as aucun marqueur

Flo.S, il y a 5 ans

Bonjour merciful !

Tout d'abord, l'erreur que nous as transmise est incomplète. En effet, après "Jeton non reconnu", il y a quelque chose d'indiqué, le fameux jeton en question ! Sans ça, il sera difficile de répondre à ton problème.

merciful, il y a 5 ans

En realite voici l'erreur complete :
Erreur fatale : PDOException non interceptée: SQLSTATE [HY000]: Erreur générale: 1 jeton non reconnu: "20OFFSET" dans C: \ xampp \ htdocs \ TP \ index.php: 24 Trace de pile: # 0 C: \ xampp \ htdocs \ TP \ index.php (24): PDO-> prepare ('SELECT * FROM p ...') # 1 {main} jeté dans C: \ xampp \ htdocs \ TP \ index.php à la ligne 24

Carouge10, il y a 5 ans

c'est ce que je disais, il manque un espace....

merciful, il y a 5 ans

Merci beaucoup les gars,il s'agissait vraiment d'espace comme courage10 l'a bien dit.Merci encore