SQL LIMIT заданными параметрами в PHP с PDO


несколько дней, я перестал использовать функции mysql_*(поскольку они устарели), и я изменил PDO. У меня есть функция, которая делает query базу данных, но у меня возникли некоторые проблемы в использовании LIMIT prepared statements.

Вот ошибка, которую я получаю:

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', '4" at line 1' in /home/yuran/public_html/avec/DatabaseContent.php:30 Stack trace: #0 /home/yuran/public_html/avec/DatabaseContent.php(30): PDOStatement->execute(Array) #1 /home/yuran/public_html/avec/inc/header.php(43): DatabaseContent->fetchSomeRows(Object(PDO), 'topics', 'topic_id', 'DSC', 0, 4) #2 /home/yuran/public_html/avec/index.php(7): require_once('/home/yuran/pub...') #3 {main} throw in /home/yuran/public_html/avec/DatabaseContent.php on line 30

это код моей функции.

<?php
private $sql = "SELECT * FROM ";
public function fetchSomeRows($conn, $table, $rowOrder, $direction, $initialLimit, $finalLimit)
{
    $this->sql .= "{$table} ORDER BY :roworder :direction LIMIT :initiallimit, :finallimit";
    $q = $conn->prepare($this->sql);
    $q->execute(array(':roworder' => $rowOrder,':direction'=>$direction,':initiallimit'=>$initialLimit,':finallimit'=>$finalLimit));
    $q->setFetchMode(PDO::FETCH_ASSOC);

    return $q;
}    
?>
Author: Guilherme Nascimento, 2015-02-23

1 answers

Проблема В том, что переменные LIMIT и OFFSET, передаваемые PARAM_STR и это делает PDO добавить апострофы в цифрах, генерируется ошибка синтаксиса.

Решить просто использовать bindParam для указания типа переменных, которые передаются.

$q->bindParam(':finallimit', (int)$finalLimit, PDO::PARAM_INT); 
$q->bindParam(':initiallimit', (int)$initialLimit, PDO::PARAM_INT); 
$q->execute();

Примечание: (int) там, чтобы гарантировать, что переменные должны быть переданы функции, как int.

 14
Author: André Ribeiro, 2015-02-24 14:07:51