Erreur 1064

yveslands -  
 le père -
Bonjour, j'ai un pb avec l'une de mes requêtes SQL. En fait je travaille en PDO(PHP Data Object).

Voici une partie du code du fichier class.inc.php:

class subjectTable {

public $selectAll;

public function __construct($db) {

$this->selectAll = $db->prepare("SELECT * FROM sujets_de_forum ORDER BY date_postage ASC LIMIT ?, ? "); //ligne 200

}
public function selectAll($offset, $lignes) {
$this->selectAll2->execute(array($offset, $lignes));
}
}

Dans le fichier forum.php j'appelle la fonction selectAll de cette facon:

$db = new MyPDO(HOST_DB, USER, PASS);

$subjectTable = new subjectTable($db);
$subjectTable->selectAll2($debut, $nb_message); // $debut et $nb_message etant des entiers. ligne 85

mais j'obtients l'erreur suivante:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''0', '10'' at line 1' in C:\xampp\htdocs\lymen\includes\class.php:200 Stack trace: #0 C:\xampp\htdocs\lymen\includes\class.php(200): PDOStatement->execute(Array) #1 C:\xampp\htdocs\lymen\forum.php(85): subjectTable->selectAll2(0, 10) #2 {main} thrown in C:\xampp\htdocs\lymen\includes\class.php on line 200

3 réponses

le père
 
Bonjour

J'ai bien peur que tu ne puisse pas utiliser prepare avec des ? sur les valeurs de LIMIT. Visiblement (même si je n'ai pas vu où c'était clairement dit dans la doc), lors de la substitution, il y a des apostrophes d'ajoutées autour de la valeur. Or il n'en faut absolument pas aux valeurs de LIMIT : LIMIT 0,10 est correct, LIMIT '0','10' est incorrect, comme le dit ton message.
Mais je suppose que tu peux appeler la requête directement, non ?
0
le père
 
En regardant la doc d'un peu plus près... (je n'ai jamais pratiqué les requêtes préparées), tu as bind_param qui devrait te permettre de résoudre ça si tu lui dis que tes paramètres sont des entiers :
https://www.php.net/manual/fr/mysqli-stmt.bind-result.php
0
le père
 
pardon, bind-result c'était pour les résultats. il faut aller voir
https://www.php.net/manual/fr/mysqli-stmt.bind-param.php
0