限制SQL不会返回任何PDO

时间:2017-10-13 21:58:36

标签: php mysql pdo

SQL语法没有任何错误,但它有一些错误,感觉它没有插入SQL中。

function getAllStudentsDetails($param){

    $sql = "SELECT * FROM students LIMIT ?,?";
    $data = Db::query($sql,$param);
    return Db::fetchObject($data);
}

如果我只是输入

,这段代码会返回值
    $sql = "SELECT * FROM students LIMIT $param[0],$param[1];

我在这里做错了吗?顺便说一下Db::query($sql,$param);返回所有其他函数的值。

自定义功能:

static function query($sql, $values=null) { 
     $stmt = self::$conn->prepare($sql); 
     $stmt->execute($values); 
     return $stmt;
} 

static function fetchObject($result) { 
     if ($result) { 
          $result = $result->fetchAll(PDO::FETCH_OBJ); 
     }else{ 
          $result = "Error in fetching Object the sql returned false"; 
     } 
     return $result; 
}

更新
我试图找出问题,似乎LIMIT ?,?中的值无论您如何通过直接stringexecute方法传递为bind两者都返回字符串作为它的类型。错误消息显示' 0'' 10'作为PDO正在放置的值。似乎PDO通过prepare方法将我的int转义为字符串。

更新2
在mysql中输入sql时,我对上面更新中的prepare函数的猜测确实是正确的

SELECT * FROM `students` WHERE 1 LIMIT '10','10'

将错误返回为

  

1064 - 您的SQL语法出错;检查与MySQL服务器版本对应的手册,以获得正确的语法

     

near'' 10'' 10''在第1行

这确实是PHP返回的错误。准备方法的方法是这样做的原因。它似乎引用了所有内容,以便将值放入数据库中以防止SQL注入。

0 个答案:

没有答案