我正在使用Slim Framework和PDO设置REST服务。 我有一个带有GET请求可选参数的控制器, 特别是,用户可以设置要选择的字段和 结果限制值:
/*
GET /products
{fields} -
{limit} -
*/
$app->get(
'/products(/)', function () use ($app, $dbHelper) {
$app->response()->header("Content-Type", "application/json");
$params = $app->request->get();
echo json_encode($dbHelper->getProducts($params));
}
);
写下“getProducts”方法我需要检查这些参数 并为查询构建一个准备好的语句:
function getProduct($id, $params) {
if(isset($params['fields'])) {
$fields = $params['fields'];
} else {
$fields = "id, name, price";
}
if(isset($params['limit'])) {
$limit = $params['limit']);
} else {
$limit = 30;
}
try {
$sqlProduct = "SELECT :fields";
$sqlProduct.= " FROM products";
$sqlProduct.= " LIMIT :limit";
$stmt = $this->db->prepare($sqlProduct);
$stmt->bindValue(':fields', $fields, PDO::PARAM_STR); // is this a String?
$stmt->bindValue(':limit', $limit, PDO::PARAM_INT);
$stmt->execute();
$products = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($products as $product) {
array_push($this->response, $product);
}
} catch (PDOException $pdoe) {
echo "PDOException: " . pdoe.getMessage();
}
return $this->response;
}
我是PDO新手,上面的代码无法正常工作。 参数化查询的正确方法是什么?
我使用isset函数来检查params吗?
数据类型检查怎么样(例如,我如何确定“限制”是一个数字?)