У меня есть следующие данные PHP
, обслуживающие меня путем выполнения SQL
на MARIADB
.
function getData ($countsql, $datasql, $page, $limit, $input, $response){
try{
$offset = ($page-1) * $limit; //calculate what data you want
$db = new db();
$db = $db->connect();
$countQuery = $db->prepare( $countsql );
$dataQuery = $db->prepare( $datasql );
$dataQuery->bindParam(':limit', $limit, \PDO::PARAM_INT);
$dataQuery->bindParam(':offset', $offset, \PDO::PARAM_INT);
while(sizeof($input)){
$curr = array_pop($input);
$dataQuery->bindParam($curr["key"], $curr["keyvalue"]);
$countQuery->bindParam($curr["key"], $curr["keyvalue"]);
}
echo $datasql."+";
echo $limit."+";
echo $offset;
$dataQuery->execute();
$countQuery->execute();
$db = null; // clear db object
$count = $countQuery->fetch(PDO::FETCH_ASSOC);
$data = $dataQuery->fetchAll(PDO::FETCH_ASSOC);
if($count['COUNT']>0&&count($data)){
$data_arr=array();
$data_arr["records"]=array();
$data_arr["pagination"]=array();
$data_arr["records"] = $data;
$data_arr["pagination"] = array(
"count" => (int)$count['COUNT'],
"page" => $page,
"limit" => $limit,
"totalpages" => ceil($count['COUNT']/$limit)
);
return $response->withJson($data_arr,200);
}
else{
return $response->withJson (
array("msg" => "Nothing found."),
204
);
}
}catch( PDOException $e ) {
//return '{"error": {"msg":' . $e->getMessage() . '}';
return $response->withJson (
array("msg" => $e->getMessage()),
500
);
}
}
Проблема в том, что когда я выполняю это на моем локальном MARIADB
сервере, код работает нормально, но когда я выполняю его онлайн-сервер, он выдает следующую ошибку (обратите внимание, что я напечатал SQL + limit + offset в конце для отладки)
{"msg":"SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''999999' OFFSET 0' at line 1"}SELECT * , (SELECT COUNT(*) FROM ART WHERE ART.AUTHOR_ID = AUTHOR.ID) as COUNT FROM AUTHOR LIMIT :limit OFFSET :offset+999999+0
Есть ли ошибка в синтаксисе или несовпадении версий?
РЕДАКТИРОВАТЬ
Я также хотел бы спросить одну маленькую вещь,
Это правильный способ получить COUNT
SELECT * , (SELECT COUNT(*) FROM ART WHERE ART.AUTHOR_ID = AUTHOR.ID) as COUNT FROM AUTHOR
Или я должен объединить эти две таблицы и затем вычислить одно и то же?