Столкнулся с такой странной проблемой. В стандартной ситуации, когда я делаю запрос с клиента посредством $.ajax() на сервер, что бы получить данные, происходит ошибка из-за условия WHERE.
Теперь по порядку:
Получаю запрос, если $config не указан, то беру дефолтный.
Если в конфиге категория больше нуля (то есть указана определенная категория), то создаю условие 'WHERE id_category='.$config["category"]; Иначе условие пусто.
Делаю выборку данных, передав соединение с БД, массив конфига и условие.
Если есть данные, то возвращаем json строку в виде массива [данные, количество].
Контроллер на сервере, в классе Articles (статьи):private $default_config=[
"start"=>0,
"count"=>50,
"order_by"=>'id',
"category"=>0,
"ajax"=>false,
];
public function getArticles($config) {
if (!$config) $config=$this->default_config;
if ($config["category"]>0) $where='WHERE id_category='.$config["category"];
else $where="";
$data=Article\Model::getArticleData($this->db, $config, $where);
if (empty($data[1])) {echo json_encode(["", 0]); return;}
else echo json_encode($data);
}
Делаем обычный запрос, вставляем условие, сортировку и лимит, получившийся результат отдаем.
Модель на сервере Article\Model:public function getArticleData($db, $config, $where) {
$query=$db->query('SELECT * FROM articles '.$where.' ORDER BY '.$config["order_by"].' DESC LIMIT '.$config["start"].', '.$config["count"]);
while ($row=$query->fetch()) {
$result[$row['id']]=$row;
}
$count=count($result);
return [$result, $count];
}
Передаем массив параметров config на сервер.
Код запроса на клиенте (важные части класса):"config": {
"start" : 0,
"count" : 50,
"order_by" : 'id',
"category" : 9,
"ajax": true,
"action": "getArticles"
},
"get_Articles": function() {
var self=this;
$.ajax({
type: 'POST',
url: 'actions.php',
data: self.config,
dataType: 'json',
success: function(res) {
console.log(res);
},
error: function(res) {
console.log(res);
}
})
},
Проблема в том, если мы от клиента передаем категорию отличную от нуля, например 9, то возвращается пустой ответ. Но при этом категория 9 нормально приходит на сервер, с ней можно проделать математические операции и вернуть правильный результат на клиент.
Если мы на сервере поставим в $default_config->category=9, то все заработает, данные буду получены из базы данных. Причем условие что от сервера что от клиента будет 'WHERE id_category=9'.
Конфигурация PDO:return new PDO('mysql:host='.$host.';dbname='.$dbname, $user, $pass, array(
PDO::MYSQL_ATTR_INIT_COMMAND=>"SET NAMES utf8",
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC)
);
Подскажите в чем проблема?
p.s. Подготовленные запросы с $query=$db->prepare(SELECT ... LIMIT :start) $query->bindParam(':start', $config["start"]) тоже не работают.