我正在尝试使用此视频https://www.youtube.com/watch?v=DHUxnUX7Y2Y在PHP中实现后端RESTful API。
$app->get('/api/customers/{id}', function (Request $request, Response $response) {
$id = $request->getAttribute('id');
$sql = "SELECT * FROM customers WHERE id = :id";
try {
// Get DB Object
$db = new db();
// Connect
$db = $db->connect();
$stmt = $db->query($sql);
$stmt->bindParam(':id', $id);
$customers = $stmt->fetch(PDO::FETCH_OBJ);
$db = null;
echo json_encode($customers);
} catch (PDOException $e) {
echo '{"error": {"text": '.$e->getMessage().'}';
}
});
当我想使用bindParam时,我总是收到错误:
SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;检查与MySQL服务器版本对应的手册,以便在第1行的“:id”附近使用正确的语法
服务器使用MySql“服务器版本:5.6.36-log - 源分发”
答案 0 :(得分:2)
如果这是使用PDO,请使用预准备语句而不是查询。这意味着要调用prepare
和execute
而不是query
。
我在下面更新了您的代码作为示例:
$stmt = $db->prepare($sql);
$stmt->bindParam(':id', $id);
$stmt=>execute();
$customers = $stmt->fetch(PDO::FETCH_OBJ);
在这种情况下,您可能还需要考虑使用bindValue
代替bindParam
来简化代码。 bindParam
通过引用传递语句来执行语句时评估$id
的值,如果id不会改变,这似乎是不必要的,因此bindValue
可能就足够了。
参考手册: