Erreur 1064
yveslands
-
le père -
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
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
A voir également:
- Erreur 1064
- Erreur t32 ✓ - Forum Livebox
- Erreur 3000 france tv - Forum Lecteurs et supports vidéo
- Erreur 0x80070643 - Accueil - Windows
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- Code erreur f3500-31 ✓ - Forum Bbox Bouygues
3 réponses
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 ?
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 ?
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
https://www.php.net/manual/fr/mysqli-stmt.bind-result.php
pardon, bind-result c'était pour les résultats. il faut aller voir
https://www.php.net/manual/fr/mysqli-stmt.bind-param.php
https://www.php.net/manual/fr/mysqli-stmt.bind-param.php