这是我的PHP代码。
<?php
header("Content-Type: application/json");
// get the HTTP method, path and body of the request
$method = $_SERVER['REQUEST_METHOD'];
$request = explode('/', trim($_SERVER['PATH_INFO'],'/'));
var_dump($request);
$input = json_decode(file_get_contents('php://input'),true);
// connect to the mysqli database
$link = mysqli_connect('localhost', 'root', 'hello', 'agita');
mysqli_set_charset($link,'utf8');
// retrieve the table and key from the path
$table = preg_replace('/[^a-z0-9_]+/i','',array_shift($request));
$key = array_shift($request)+0;
// escape the columns and values from the input object
$columns = preg_replace('/[^a-z0-9_]+/i','',array_keys($input));
$values = array_map(function ($value) use ($link) {
if ($value===null) return null;
return mysqli_real_escape_string($link,(string)$value);
},array_values($input));
// build the SET part of the SQL command
$set = '';
for ($i=0;$i<count($columns);$i++) {
$set.=($i>0?',':'').'`'.$columns[$i].'`=';
$set.=($values[$i]===null?'NULL':'"'.$values[$i].'"');
}
// create SQL based on HTTP method
switch ($method) {
case 'GET':
$sql = "select * from `$table`".($key?" WHERE id=$key":''); break;
case 'PUT':
$sql = "update `$table` set $set where id=$key"; break;
case 'POST':
$sql = "insert into `$table` set $set"; break;
case 'DELETE':
$sql = "delete `$table` where id=$key"; break;
}
// excecute SQL statement
$result = mysqli_query($link,$sql);
// die if SQL statement failed
if (!$result) {
http_response_code(404);
die(mysqli_error());
}
// print results, insert id or affected row count
if ($method == 'GET') {
if (!$key) echo '[';
for ($i=0;$i<mysqli_num_rows($result);$i++) {
echo ($i>0?',':'').json_encode(mysqli_fetch_object($result));
}
if (!$key) echo ']';
} elseif ($method == 'POST') {
echo mysqli_insert_id($link);
} else {
echo mysqli_affected_rows($link);
}
// close mysqli connection
mysqli_close($link);
?>
我已经实现了RESTful API,现在我可以使用$http.get(url+customerId)
接收JSON对象。这将返回我想要的JSON对象。查看上面的服务器代码,如果我想删除customerId 5的客户,我需要回拨什么电话呢?
我试过$http.delete(url+customerId).then()
...
但它似乎不起作用。需要帮助。
答案 0 :(得分:1)
查看浏览器开发人员控制台以查看脚本返回的内容。
既然你说它返回500我就会认为PHP崩溃了。从我所看到的
mysqli_error
错过了$link
作为参数。但错误日志应该
包含详细信息。
您的脚本的一些提示:
mysqli_real_escape_string
json_encode
函数始终返回正确的JSON
响应。即也许你可以简单地使用:json_encode($result->fetch_all(MYSQLI_ASSOC))
在GET上输出响应。$result->field_count == 0
答案 1 :(得分:0)
我使用了相同的脚本。
这里的问题是这行代码:
case 'DELETE':
$sql = "delete `$table` where id=$key"; break;
需要将其更新为以下代码:
case 'DELETE':
$sql = "delete FROM `$table` where id=$key"; break;
现在运行代码,它将工作。它对我有用。
以下是实际代码的链接:
https://www.leaseweb.com/labs/2015/10/creating-a-simple-rest-api-in-php/
谢谢,
切里安。