带有可选参数的预备语句

时间:2014-01-20 15:25:29

标签: php rest pdo prepared-statement slim

我正在使用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吗?

数据类型检查怎么样(例如,我如何确定“限制”是一个数字?)

0 个答案:

没有答案