我正在用php开发一个API,以使用JSON从我的数据库中显示android应用上的数据。
在我的应用中,我想先显示20条记录,然后在用户滚动到顶部后再次显示20条记录。 我要从应用程序中获取记录的最后一个ID,以显示来自最后一个ID的接下来的20条记录。
这是我的代码
<?php
$last_movie = 0;
$genre = $_REQUEST['genre'];
$last_movie = $_REQUEST['lastid'];
require_once("connect.php");
$myArray = array();
if($last_movie == 0)
{
$result = $conn->query("SELECT * FROM my_movies WHERE genre = '$genre' ORDER BY year DESC LIMIT 20");
}
else
{
$result = $conn->query("SELECT * FROM my_movies WHERE genre = '$genre' ORDER BY year LIMIT ".$last_movie.",20");
}
if ($result) {
while($row = $result->fetch_array(MYSQL_ASSOC)) {
$myArray[] = $row;
}
echo json_encode($myArray);
}
$result->close();
$conn->close();
?>
我正在获取某些类型的值,但有时它显示空的JSON。 我尝试了这个网址 http://freemodedapk.com/bobmovies/by_genre.php?genre=Action
它的工作原理,每当我尝试使用上一个id时 http://freemodedapk.com/bobmovies/by_genre.php?genre=Action&lastid=4714
它返回空的JSON。我的数据库中有值。
但是某些类型的作品效果很好 http://freemodedapk.com/bobmovies/by_genre.php?genre=Drama http://freemodedapk.com/bobmovies/by_genre.php?genre=Drama&lastid=865
我所有类型的数据库中共有4858条记录。
任何人都可以帮助我解决某些类型的空JSON问题吗?
答案 0 :(得分:0)
您的主要问题是使用了错误的LIMIT限制:当您为LIMIT关键字使用2个参数时,第一个用于偏移值(不适用于ID),第二个用于限制结果。
简而言之:您应该使用LIMIT 0,20来获取前20个结果,使用LIMIT 20,20来显示接下来的20个结果,依此类推。
此外,您的代码也不安全-您进行了SQL注入。尽量不要使用包含注入的源代码在您的网站上发布直接URL,因为某些坏蛋可能会丢弃您的数据库或做一些其他有害的事情。
下面列出了示例代码(可能需要稍作更改):
<?php
require_once('connect.php');
$response = [];
$items_per_page = 20;
$page = (int) (($_REQUEST['page'] - 1) * $items_per_page);
$genre = $conn->escape_string($genre); # replace escape_string with proper method if necessary
$result = $conn->query("SELECT * FROM my_movies WHERE genre = '$genre' ORDER BY year DESC LIMIT $page,$items_per_page");
if ($result)
{
$response = $conn->fetch_all($result, MYSQLI_ASSOC); # replace fetch_all with proper method if necessary
}
echo json_encode($response);
$result->close();
$conn->close();
答案 1 :(得分:0)
如果您想获取ASC的最后一个ID,请使用
SELECT * FROM my_movies WHERE genre = '$genre' id<".$last_movie." ORDER BY year LIMIT 0,20
或者如果您想分页,则您的OFFSET值错误,
您应该使用LIMIT 0,20来获取前20个结果,从LIMIT 20,20到下一个20,LIMIT 40,20
看起来像代码
require_once('connect.php');
$result = [];
$limit = 20;
$pageNumber = (int) (($_REQUEST['pageNumber'] - 1) * $limit);
$genre = $conn->escape_string($genre);
$getDta = $conn->query("SELECT id,title,stream,trailer,directors,actors,quality,year,genre,length,translation,rating,description,poster FROM my_movies WHERE genre = '".$genre."' ORDER BY year DESC LIMIT $pageNumber,$limit");
if ($result)
$result =$conn->fetch_all($result, MYSQLI_ASSOC);
echo json_encode($result);
$result->close();
$conn->close();