无法从最后一个ID检索PHP mysql数据

时间:2018-12-03 03:51:57

标签: php mysql json

我正在用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问题吗?

2 个答案:

答案 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

请检查您的SQL注入

看起来像代码

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();