PDO param读取为字符串而不是int

时间:2017-06-22 07:21:28

标签: php mysql pdo

我想将GET var传递给查询以设置OFFSET。

try {

  $sql_offset =  isset($_GET['offset']) ? $_GET['offset'] : 0;

  $main_query = "SELECT * FROM Orders
                LIMIT 150 OFFSET :offset";

  $result = $db->prepare($main_query);
  $result->bindParam(':offset', $sql_offset, PDO::PARAM_INT);
  $result->execute();

} catch (Exception $e) {

  $error = $e->getMessage();
  echo "<h2>".$error."</h2>";
  die();

}

查询失败,收到的错误消息为:

  

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

注意:如果我将450直接放入查询中,它可以正常工作。

在我看来,问题是它正在将字符串读作字符串'450'而不是int 450.我尝试用PDO::PARAM_INT解决这个问题 - 没有帮助。
我使用(int)$sql_offsetint_val($sql_offset)解析了值,但没有帮助。意思是,我仍然收到相同的错误消息。

问题:我是对的吗?是作为字符串看到的问题?如果是这样,我该如何解决? 或者这里有不同的问题吗?

1 个答案:

答案 0 :(得分:0)

尝试解析int中的值,然后检查:

$sql_offset =  (int)(isset($_GET['offset']) ? $_GET['offset'] : 0);