为什么JSON没有显示数据

Error when using some.php?id=$id

I have table named tb_syarat_layanan. When I try to get JSON, array it shows no Data.

<?php

 //Importing database
 require_once('koneksi.php');

 $query = "select * from tb_syarat_layanan WHERE id_layan=$id";
 $hasil = mysqli_query($con,$query);

 if(mysqli_num_rows($hasil) > 0 )
 {
     $response = array();
     $response["data"] = array();
     while($x = mysqli_fetch_array($hasil)) 
     {
         $h['id_layan'] = $x["id_layan"];     
         $h['dokumen'] = $x["dokumen"];
         array_push($response["data"], $h);
     }
     echo json_encode($response);
 }
 else 
 {
     $response["message"] = "No Data";
     echo json_encode($response);
 }

?>

But when I set my $query like this :

$query = "select * from tb_syarat_layanan WHERE id_layan=1";

it show the data that I want

JSON shows no data when $query is set with variable $id

The problem is how you are getting the id from the URL. Data sent on query string are stored inside $_GET

$id = $_GET['id'];
$query = "SELECT * FROM tb_syarat_layanan WHERE id_layan = $id";

Let's say you have some.php?id=1 in the URL. You need a way to get that id parameter from the query string. In PHP, this can be done easily using the $_GET superglobal. $_GET allows you to access the values passed in the query string.

So in your code, you can do something like:

  $id = $_GET['id'];

The best practice is to escape any input passed in the query string:

 $id = htmlspecialchars($_GET['id']);

But if you aren't outputting that input anywhere in the page where it can be executed, and you aren't storing the query parameters for output later, this shouldn't be a problem. The only real danger here would be SQL injection. The best method for avoiding this would be to use prepared statements. See https://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php