![](/img/trans.png)
[英]using php curl for valid http URL is returning 500 server error
[英]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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.