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
Réponse acceptée

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
Réponse acceptée

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
Auteur
Réponse acceptée

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
Réponse acceptée

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

merciful
Auteur
Réponse acceptée

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