Rumah > Soal Jawab > teks badan
Saya mencipta kaedah REST API GET dalam php menggunakan id parameter. http://localhost:8012/REST-API/items/expenses?id=2. Ini berfungsi dengan baik, tetapi saya mahu menggunakan http://localhost:8012/REST-API/items/expenses?id=2&year=2022 untuk mendapatkan data. Saya baru mengenali php dan mencuba semua kemungkinan tetapi tidak mendapat respons yang betul. Di bawah ialah kod
Expenses.php dalam<?php class Expenses{ private $expensesTable = "expenses"; public $id; public $month; private $amount; public $year; public function __construct($db){ $this->conn = $db; } function expenses(){ if($this->year) { $stmt = $this->conn->prepare("SELECT * FROM ".$this->expensesTable." WHERE year = ?"); $stmt->bind_param("i", $this->year); } else if($this->id) { $stmt = $this->conn->prepare("SELECT * FROM ".$this->expensesTable." WHERE id = ?"); $stmt->bind_param("i", $this->id); } else if($this->id && $this->year) { $stmt = $this->conn->prepare("SELECT * FROM ".$this->expensesTable." WHERE id = ? AND year= ?"); $stmt->bind_param("i", $this->id,$this->year); } else { $stmt = $this->conn->prepare("SELECT * FROM ".$this->expensesTable); } $stmt->execute(); $result = $stmt->get_result(); return $result; } } ?>
<?php header("Access-Control-Allow-Origin: *"); header("Content-Type: application/json; charset=UTF-8"); include_once '../config/Database.php'; include_once '../class/Expenses.php'; $database = new Database(); $db = $database->getConnection(); $expenses = new Expenses($db); $expenses->id = (isset($_GET['id']) && $_GET['id']) ? $_GET['id'] : '0'; $expenses->year = (isset($_GET['year']) && $_GET['year']) ? $_GET['year'] : '0'; $expenses->extra = (isset($_GET['month']) && $_GET['month']) ? $_GET['month'] : '0'; $result = $expenses->expenses(); if($result->num_rows > 0){ $itemRecords=array(); $itemRecords["expenses"]=array(); while ($expense = $result->fetch_assoc()) { extract($expense); $itemDetails=array( "id" => $id, "month" => $month, "amount" => $amount, "year" => $year ); array_push($itemRecords["expenses"], $itemDetails); } http_response_code(200); echo json_encode($itemRecords); }else{ http_response_code(404); echo json_encode( array("message" => "No item found.") ); }
RewriteEngine On # Turn on the rewriting engine RewriteRule ^read$ read.php [NC,L] RewriteRule ^read/([0-9_-]*)$ read.php?id= [NC,L] RewriteRule ^create$ create.php [NC,L] RewriteRule ^update$ update.php [NC,L] RewriteRule ^delete$ delete.php [NC,L] RewriteRule ^expenses$ readexpenses.php [NC,L] RewriteRule ^expenses/([0-9_-]*)$ readexpenses.php?year= [NC,L] RewriteRule ^expenses/([0-9_-]*)$ readexpenses.php?id= [NC,L] RewriteRule ^expenses/([0-9_-]*)$ readexpenses.php?id=&year= [NC,L]
P粉6429198232024-01-30 00:37:39
Seperti yang saya katakan dalam komen, tiga peraturan terakhirnya adalah salah:
RewriteRule ^expenses/([0-9_-]*)$ readexpenses.php?year= [NC,L] RewriteRule ^expenses/([0-9_-]*)$ readexpenses.php?id= [NC,L] RewriteRule ^expenses/([0-9_-]*)$ readexpenses.php?id=&year= [NC,L]
Apakah yang akan berlaku kepada URL ini? http://example.com/expenses/2012
如何检测这是 id
或 year
?
Saya mengesyorkan menggunakan penyelesaian ini:
http://example.com/expenses/id/2012 -> readexpenses.php?id=2012 http://example.com/expenses/year/2022 -> readexpenses.php?year=2022 http://example.com/expenses/2012/2022 -> readexpenses.php?id=2012&year=2022
Jadi .htaccess
failnya ialah: (baru menukar tiga peraturan terakhir)
RewriteEngine On # Turn on the rewriting engine RewriteRule ^read$ read.php [NC,L] RewriteRule ^read/([0-9_-]*)$ read.php?id= [NC,L] RewriteRule ^create$ create.php [NC,L] RewriteRule ^update$ update.php [NC,L] RewriteRule ^delete$ delete.php [NC,L] RewriteRule ^expenses$ readexpenses.php [NC,L] RewriteRule ^expenses/year/([0-9]+)$ readexpenses.php?year= [NC,L] RewriteRule ^expenses/id/([0-9]+)$ readexpenses.php?id= [NC,L] RewriteRule ^expenses/([0-9]+)/([0-9]+)$ readexpenses.php?id=&year= [NC,L]
Ujian dalam talian:
Saya telah mengujinya dan ia berfungsi dalam setiap kes id /年
,id< /code>
和 年份
, di bawah anda boleh melihatnya melepasi url
Anda juga harus menukar syarat php anda
if ($this->id && $this->year) { //.. } else if ($this->id) { //.. } else if ($this->year) { //.. } else { //.. }
Tanpa perubahan ini, ia tidak akan mencapai masa id dan tahun ditetapkan