PDO将单引号添加到绑定参数

时间:2013-10-23 10:34:19

标签: php mysql pdo slim

我正在使用Slim框架为站点构建RESTful后端,使用PHP的PDO来查询数据库。但是,当我尝试将参数绑定到预准备语句时,我收到以下错误:

  

string(206)“SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法中有错误;请查看与您的MySQL服务器版本对应的手册,以便在”10“附近使用正确的语法'在第1行“`

看起来PDO用单引号包围我的绑定参数。我的路线代码如下:

$app->get("/members/next10/:offset", function($offset) use($app) {
    $app->response()->header('Content-Type', 'application/json');

    try {
        $pdo = connectToDatabase();

        $query = $pdo->prepare("SELECT * FROM `members` LIMIT 10 OFFSET :offset");
        $query->bindParam(":offset", $offset, PDO::PARAM_INT);
        $query->execute();

        $result = $query->fetchAll(PDO::FETCH_ASSOC);

        if (!empty($result)) {
            echo json_encode($result);
        } else {
            $app->response()->status(404);
        }
    } catch (PDOException $d) {
        $app->response()->status(500);
        var_dump($d->getMessage());
    }
});

我错过了什么吗?我尝试从URL中抓取:offset并在绑定之前将其指定为$offset转换为整数,但这也没有任何区别。

1 个答案:

答案 0 :(得分:0)

可能的解决方案:将param正确地转换为整数。如果,在方法的第一行,我使用$offset = (int) $offset;它是有效的。以前我试图用$query->bindParam()方法进行演员。

路线看起来像:

$app->get("/members/next10/:offset", function($offset) use($app) {
    $offset = (int) $offset;

    $app->response()->header('Content-Type', 'application/json');

    try {
        $pdo = connectToDatabase();

        $query = $pdo->prepare("SELECT * FROM `members` LIMIT 10 OFFSET :offset");
        $query->bindParam(":offset", $offset, PDO::PARAM_INT);
        $query->execute();

        $result = $query->fetchAll(PDO::FETCH_ASSOC);

        if (!empty($result)) {
            echo json_encode($result);
        } else {
            $app->response()->status(404);
        }
    } catch (PDOException $d) {
        $app->response()->status(500);
        var_dump($d->getMessage());
    }
});