Bonjour à tous!!
Je fais face à un souci dans mon script, c'est au niveau de la requête SQL où se trouve le problème,, besoin d'un éclaircisseement. J'ai deux fichiers, un fichier Model_stagiaire.php et un fichier form_stagiaire.php
Voici le script pour le fichier Model_stagiaire.php

     require_once('../model/Cnx.php');
     class Model_Stagiaire extends Cnx
     {
          private $nom;
          private $data;
          private $offset;
          private $size;
          public function getAll_Stag($nom, $size, $offset){
                $pdo = $this->connect();
                $this->data = [];
                $this->nom = $nom;
                $this->size = $size;
                $this->offset = $offset;

               $req = "SELECT * FROM tbl_stagiaire_sta AS S, tbl_filiere_fil AS F 
                              WHERE F.fil_id = S.fil_id AND
                             (S.sta_nom LIKE '%".$this->nom."%' 
                              OR S.sta_prenom LIKE '%".$this->nom."%')
                              LIMIT '".$this->size."' OFFSET '".$this->offset."' ";
               $res = $pdo->query($req);
               $this->data = $res->fetchAll(PDO::FETCH_ASSOC);
               return $this->data;
          }
       }

Voici le script pour le fichier form_stagiaire.php

   require_once('../model/Model_Stagiaire.php');
   $stagiaire = new Model_Stagiaire();

         $lines = $stagiaire->getAll_filiere();

         $nom = isset($_GET['nom'])?$_GET['nom']:'';
         $filiere = isset($_GET['filiere'])?$_GET['filiere']:0;

         $size = isset($_GET['size'])?$_GET['size']:5;
         $page = isset($_GET['page'])?$_GET['page']:1;
         $offset = ($page - 1) * $size;

         $rows = $stagiaire->getAll_Stag($nom, $size, $offset);

l'idée est de réaliser une liste de stagiaire qui sera paginée et qui sera affichée dans le fichier form_stagiaire.php

Malheureusement, le script me renvoit l'erreur suivante:

  Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de ''5' OFFSET '-5'' à la ligne 3 in 

Par contre, quand je retire LIMIT et OFFSET, le script fonctionne convenablement

4 réponses


Hello,

En effet LIMIT attend un type integer et dans ton cas il s'agit d'un type string, voir doumentation :
https://mariadb.com/kb/en/limit/

Idem pour OFFSET

Merci pour ton intervention cher JRcode, sauf que je suis toujours perdu. J'ai eu accès au lien que tu m'as suggéré, j'ai lu l'article et je pense avoir bien respecté la synthaxe malheureusement je viens d'obtenir la même erreur.
la requête ci-dessous est celle que j'utilise dans mon script, sauf qu'elle me retourne la même erreur lorsque j'affecte les valeurs dans les variables:

Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de ''5' OFFSET '0'' à la ligne 2

par contre, losque je tape cette requete en phpMyAdmin à travers l'onglet sql, elle marche correctement.

SELECT * FROM tbl_stagiaire_sta INNER JOIN tbl_filiere_fil  ON tbl_stagiaire_sta.fil_id = tbl_filiere_fil.fil_id
WHERE sta_nom LIKE '%o%' OR sta_prenom LIKE '%o%'
LIMIT 5 OFFSET 0

S'il vous plaît, ne vous sentez pas fatiguer de moi, aidez-moi, j'ai besoin de comprendre le problème

Oui, comme je te disais plus haut le problème vient du fait que tu ajoutes des guillemets simples autour de tes valeurs de OFFSET et LIMIT. Ces valeurs sont donc interprétées comme des chaines de caractères alors que SQL attend un nombre, comme dans ta requête phpMyAdmin.

Tu devrais écrire une dernière ligne du style :

LIMIT ".$this->size." OFFSET ".$this->offset."";

Merci JRcode, je m'y mets toute de suite