PHP PDO:如何返回整数

lau*_*kok 1 php string pdo integer prepared-statement

我认为这可能是我的pdo获取数据方法的一个缺陷,

public function fetch_all($query, $params = array())
    {
        try
        {
            # prepare the query
            $stmt = $this->connection->prepare($query);

            # if $params is not an array, let's make it array with one value of former $params
            if (!is_array($params)) $params = array($params);

            # execute the query
            $stmt->execute($params);

            # return the result
            return $stmt->fetchAll(PDO::FETCH_ASSOC);
        }
        catch (PDOException $e) 
        {
            # call the get_error function
            $this->get_error($e);
        }
    }
Run Code Online (Sandbox Code Playgroud)

传递给此方法的所有参数都将成为字符串,但我需要整数用于sql LIMIT查询,如下所示

$sql = "
    SELECT *

    FROM root_pages
    ORDER BY root_pages.pg_created DESC

    LIMIT ?,?";

items = $connection->fetch_all($sql,array('0','6'));
Run Code Online (Sandbox Code Playgroud)

它返回此错误,

2SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误; 检查与MySQL服务器版本对应的手册,以便在第32行的"0","6"附近使用正确的语法

我该如何解决?

编辑:

正如所建议的,我将我的方法中的代码更改为以下内容,

# fetch a multiple rows of result as a nested array ( = multi-dimensional array)
    public function fetch_all($query, $params = array())
    {
        try
        {
            # prepare the query
            $stmt = $this->connection->prepare($query);

            # if $params is not an array, let's make it array with one value of former $params
            //if (!is_array($params)) $params = array($params);


            foreach($params as $k=>$p){
              if(is_numeric($p)){
                $stmt->bindParam($k+1, $p, PDO::PARAM_INT);
              }
              else{
                $stmt->bindParam($k+1, $p, PDO::PARAM_STR);
              }
            }
            $stmt->execute();


            # execute the query
            //$stmt->execute($params);

            # return the result
            return $stmt->fetchAll(PDO::FETCH_ASSOC);
        }
        catch (PDOException $e) 
        {
            # call the get_error function
            $this->get_error($e);
        }
    }

$items = $connection->fetch_all($sql,array(0,6));
Run Code Online (Sandbox Code Playgroud)

然后我得到一个不同的错误,

2SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误; 检查与MySQL服务器版本对应的手册,以便在第32行的"6"附近使用正确的语法

编辑:

我把它改成了,

if(is_int($p)){..}
Run Code Online (Sandbox Code Playgroud)

但仍然得到同样的错误......叹息......

die*_*stn 7

你应该用PDO :: PARAM_INT类型传递你的参数,如:

$sth->bindParam(':limit', $limit, PDO::PARAM_INT);
Run Code Online (Sandbox Code Playgroud)