Slim PHP REST API 不在生产服务器中获取数据,在本地主机中工作
Slim PHP REST API not fetching data in production server, works in localhost
我有一个简单的 Slim PHP REST api,它在我的本地服务器上运行良好,但是当我将它推送到共享托管服务器时,它不会获取数据。我的有限计划不允许我通过 SSH 访问数据库,因此很难 运行 测试,但这是我到目前为止所跟踪的...
这是一个测试api端点:
$app->get('/test', function() use($app) {
$app->response->setStatus(200);
if($db = getDB()){
echo "connected<br>";
} else{
echo "not connected<br>";
}
$sql = "SELECT * FROM artists";
$stmt = $db->prepare($sql);
if($stmt){
echo "statement true<br>";
} else{
echo "statement not true<br>";
}
$stmt->execute();
$stmt->setFetchMode(PDO::FETCH_OBJ);
if($stmt->fetch()){
echo "executed";
}else{
echo "not executed";
}
});
这给了我一个输出:
'connected'
'statement true'
'not executed'。
我能够 运行 从 phpMyAdmin 仪表板成功查询。在网页中,其余 api 工作正常并返回 'No match found' 消息,暗示功能正常,但数据集为空。不知道往哪个方向看,为什么没有返回记录?
在完整的数据函数中:
$error = array('error' => 'No match found');
// fetch data into array
$i = 0;
while($row = $stmt->fetch()) {
$data[$i] = $row;
$i++;
}
// return data
if($data) {
$app->response->setStatus(200);
$app->response()->headers->set('Content-Type', 'application/json');
echo json_encode($data, JSON_PRETTY_PRINT);
} else {
$app->response->setStatus(200);
$app->response()->headers->set('Content-Type', 'application/json');
echo json_encode($error);
}
我是 PHP 的新手,所以任何有关如何排除故障、记录或以其他方式跟踪问题的建议都将不胜感激。
啊啊啊……找到了!问题不在于 php,而在于 sql。显然,sql 语句在我的本地 machine (mac) 上不区分大小写,但在 Linux 服务器上区分大小写。在数据库中,table 名称是 Artists
,而在上面的代码中我有 artists
。
所以更正为:
$sql = "SELECT * FROM artists";
变为:
$sql = "SELECT * FROM Artists";
我有一个简单的 Slim PHP REST api,它在我的本地服务器上运行良好,但是当我将它推送到共享托管服务器时,它不会获取数据。我的有限计划不允许我通过 SSH 访问数据库,因此很难 运行 测试,但这是我到目前为止所跟踪的...
这是一个测试api端点:
$app->get('/test', function() use($app) {
$app->response->setStatus(200);
if($db = getDB()){
echo "connected<br>";
} else{
echo "not connected<br>";
}
$sql = "SELECT * FROM artists";
$stmt = $db->prepare($sql);
if($stmt){
echo "statement true<br>";
} else{
echo "statement not true<br>";
}
$stmt->execute();
$stmt->setFetchMode(PDO::FETCH_OBJ);
if($stmt->fetch()){
echo "executed";
}else{
echo "not executed";
}
});
这给了我一个输出: 'connected' 'statement true' 'not executed'。
我能够 运行 从 phpMyAdmin 仪表板成功查询。在网页中,其余 api 工作正常并返回 'No match found' 消息,暗示功能正常,但数据集为空。不知道往哪个方向看,为什么没有返回记录?
在完整的数据函数中:
$error = array('error' => 'No match found');
// fetch data into array
$i = 0;
while($row = $stmt->fetch()) {
$data[$i] = $row;
$i++;
}
// return data
if($data) {
$app->response->setStatus(200);
$app->response()->headers->set('Content-Type', 'application/json');
echo json_encode($data, JSON_PRETTY_PRINT);
} else {
$app->response->setStatus(200);
$app->response()->headers->set('Content-Type', 'application/json');
echo json_encode($error);
}
我是 PHP 的新手,所以任何有关如何排除故障、记录或以其他方式跟踪问题的建议都将不胜感激。
啊啊啊……找到了!问题不在于 php,而在于 sql。显然,sql 语句在我的本地 machine (mac) 上不区分大小写,但在 Linux 服务器上区分大小写。在数据库中,table 名称是 Artists
,而在上面的代码中我有 artists
。
所以更正为:
$sql = "SELECT * FROM artists";
变为:
$sql = "SELECT * FROM Artists";