簡體   English   中英

Apache Server不使用PHP腳本返回HTTP錯誤代碼

[英]Apache Server not returning HTTP error codes with PHP script

我有一個Web服務,可查詢數據庫中的某個區域,然后以JSON格式返回結果。 它可以工作,但發出錯誤請求時不會顯示“ 400錯誤請求”之類的內容。 該頁面僅顯示;

 [] 

為什么是這樣? 我以為apache已內置HTTP錯誤代碼處理。 我要腳本執行的操作是在發出錯誤請求或發生404錯誤時返回特定代碼。

這是我的php腳本;

<?php

$a = $_GET["region"];
$conn = new PDO ("mysql:host=localhost;dbname=***;", "***", 
"***");

$results = $conn->query("SELECT * FROM pointsofinterest WHERE region='$a'");
$resultsAsAssocArray = $results->fetchAll(PDO::FETCH_ASSOC);

echo json_encode($resultsAsAssocArray);

?>

據我從您的代碼可以理解, 沒有提出錯誤的請求。

您正在回顯$ resultsAsAssocArray,它僅包含您的SELECT結果。 我猜這是在這種情況下是空的。

嘗試從命令行或通過PHPMyAdmin運行相同的SQL查詢,看看是否返回任何結果。

編輯:如果您希望在不返回任何結果時返回404錯誤代碼,則應使用http_response_code()函數

此處舉例說明: https//stackoverflow.com/a/41593478/1308765

如果發生錯誤(如果禁用了display_errors ),PHP可以自動將狀態設置為500,但對於其他情況,您需要明確告訴它如何響應。

例如,假設您沒有找到記錄,則想以404響應...

$conn = new PDO ('mysql:host=localhost;dbname=***;charset=utf8', '***', '***', [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
]);

// Note that I'm using a prepared statement
$stmt = $conn->prepare('SELECT * FROM pointsofinterest WHERE region = ?');

$stmt->execute([filter_input(INPUT_GET, 'region')]);
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);

if (count($results) === 0) {
    http_response_code(404);
}

echo json_encode($results);

參見http://php.net/manual/function.http-response-code.php

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM