【发布时间】:2025-12-17 14:15:01
【问题描述】:
我正在尝试创建一个可以用作 REST API 的非常基本的脚本。我在页面上显示任何输出时遇到了很多麻烦。在下面的代码中,您可以看到一些我试图获得输出的注释方法。如果我删除 printf while 循环并仅使用 responseData = json_encode($result) 行,我将获得格式正确但仅包含空值的 JSON 输出。 (表列具有适当命名的表头,但没有其他内容,不返回数据)。作为记录,SQL 语句, 被正确执行,没有错误。以下脚本在运行时不会生成 PHP.log 错误。如果我将 SQL 更改为插入语句,我可以在数据库中看到结果值。因此,无论这里发生什么,只是将这些值输出到页面都会出现一些问题。
这是我正在使用的整个页面脚本的代码;
<?php
define("PROJECT_ROOT_PATH", __DIR__);
define("DB_HOST", "localhost");
define("DB_USERNAME", "testuser");
define("DB_PASSWORD", "testpw");
define("DB_DATABASE", "testgb");
$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$uri = explode( '/', $uri );
/** Basic Input Filter **/
function input_filter($data) {
$data= trim($data);
$data= stripslashes($data);
$data= htmlspecialchars($data);
return $data;
}
/**
* Get URI elements.
*
* @return array
*/
function getUriSegments()
{
$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$uri = explode( '/', $uri );
return $uri;
}
function sendOutput($data, $httpHeaders=array())
{
header_remove('Set-Cookie');
if (is_array($httpHeaders) && count($httpHeaders)) {
foreach ($httpHeaders as $httpHeader) {
header($httpHeader);
}
}
echo $data;
exit;
}
/**
* "/[usertoken]/read" Endpoint - retrieve orders from db
*/
function readAction()
{
$strErrorDesc = '';
$requestMethod = $_SERVER["REQUEST_METHOD"];
$arrQueryStringParams = parse_str($_SERVER['QUERY_STRING'], $query);
if (strtoupper($requestMethod) == 'GET') {
try {
$intLimit = 100;
if (isset($arrQueryStringParams['limit']) && $arrQueryStringParams['limit']) {
$intLimit = $arrQueryStringParams['limit'];
}
$intItemId = 0;
if (isset($arrQueryStringParams['itemid']) && $arrQueryStringParams['itemid']) {
$intItemId = $arrQueryStringParams['itemid'];
echo $intItemId;
}
$conn = mysqli_connect(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
if ($conn->connect_error)
{
die("Connection failed: ". mysqli_connect_error());
}
$sql = "SELECT * FROM verified_orders WHERE itemid=?;";
$stmt = mysqli_stmt_init($conn);
if (!mysqli_stmt_prepare($stmt, $sql)) {
die("Statement preparation failed.");
} else {
mysqli_stmt_bind_param($stmt, "d", $intItemId);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
if ($row = mysqli_fetch_assoc($result)) {
while ($row = $result -> fetch_row()) {
printf ("%s (%s)\n", $row[0], $row[1]);
}
}
/*$responseData = json_encode($result);*/
}
} catch (Error $e) {
$strErrorDesc = $e->getMessage().'.';
$strErrorHeader = 'HTTP/1.1 500 Internal Server Error';
}
} else {
$strErrorDesc = 'Method not supported';
$strErrorHeader = 'HTTP/1.1 422 Unprocessable Entity';
}
// send output
if (!$strErrorDesc) {
/*echo $responseData;
} else {
echo $responseData;*/
}
}
if (isset($uri[2]) && $uri[2] != 'user') {
header("HTTP/1.1 404 Not Found");
exit();
}
if ($uri[3] == "read") {
readAction();
}
?>
【问题讨论】: