Comment faire pour ajouter les valeurs de la variable à l'intérieur de pdo->query
Je veux mettre à jour mon code actuel qui est constamment sql injecté avec PDO.
Actuellement je suis bloqué à l'aide d'une variable dans une requête PDO.
Si j'ai deux arguments comme cela
$rowsPerPage = 3;
//by default we show first page
$pageNum = 1;
if (isset($_GET['page'])) {
$pageNum = mysql_real_escape_string($_GET['page']);
}
$offset = ($pageNum - 1) * $rowsPerPage;
Et j'ai de la requête comme ceci
$STH = $DBH->query("SELECT News.ID, LEFT(NewsText,650), Title, AID, Date, imgID," .
"DATE_FORMAT(Date, '%d.%m.%Y.') as formated_date " .
"FROM News, Categories, NewsCheck WHERE Name LIKE '%News - Block%' AND CID=Categories.ID AND JID=News.ID ".
"ORDER BY `Date` DESC LIMIT $offset, $rowsPerPage");
AOP signale une erreur dans la dernière ligne de la requête ORDER BY
Lorsque je remplace ces ligne avec
"ORDER BY Date DESC LIMIT3,3");
tout ce travail.
Donc comment faire pour ajouter les valeurs de la variable à l'intérieur de PDO::query ?
Mise à jour:
Merci de répondre à soufflet, j'ai mis à jour mon code comme ceci
$STH = $DBH->prepare("SELECT News.ID, LEFT(NewsText,650), Title, AID, Date, imgID," .
"DATE_FORMAT(Date, '%d.%m.%Y.') as formated_date " .
"FROM News, Categories, NewsCheck WHERE Name LIKE '%News - Block%' AND CID=Categories.ID AND JID=News.ID ".
"ORDER BY `Date` DESC LIMIT :offset, :rowsPerPage;");
$STH->bindParam(':offset', $offset, PDO::PARAM_STR);
$STH->bindParam(':rowsPerPage', $rowsPerPage, PDO::PARAM_STR);
$STH->execute();
Mais erreur s'est produite:
Fatal error: Uncaught exception 'PDOException' with message
'SQLSTATE[42000]: erreur de Syntaxe ou de violation d'accès: 1064 Vous avez une
erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre
Les versions du serveur MySQL pour la bonne syntaxe à utiliser près de "-3', '3" à
ligne 1 " dans /aop/test.php:42 Stack trace: #0
/pdo/test.php(42): PDOStatement->execute() #1 {principal} jeté dans
/aop/test..
Deuxième Mise À Jour
Modifié à partir de PARAM_STR À PARAM_INT comme ce
$STH->bindParam(':offset', $offset, PDO::PARAM_INT);
$STH->bindParam(':rowsPerPage', $rowsPerPage, PDO::PARAM_INT);
Tout fonctionne.
OriginalL'auteur BobRock | 2012-03-30
Vous devez vous connecter pour publier un commentaire.
Vous souhaitez utiliser préparées et les paramètres de la requête comme suit:
À l'aide de variables directement dans votre requête sera pas vous protéger contre les injections SQL, même si vous êtes en utilisant PDO. Les paramètres sont la seule bonne façon de les prévenir.
Oui, parce que dans mon exemple j'ai utilisé
PDO:bindParam
qui remplacera en conséquence:parameter
par$your_variable
.bindParam
va assurez-vous également il n'y a pas de caractères spéciaux dans votre requête.merci pour l'info. Je suis juste mis à jour question.
Utilisation
PDO::PARAM_INT
au lieu dePDO::PARAM_STR
depuis vos paramètres sont des nombres.sens 🙂 Merci man
OriginalL'auteur Pierre-Olivier