PHP 会话变量限制 sql 错误

PHP Limit with session var sql error

我的问题是得到这个错误:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1'' at line 1

这段代码给我错误:

public function toonAlles()
{
    try {
        if (isset($_SESSION["limiet"])) {
            $limitwaarde = $_SESSION["limiet"];
            echo $limitwaarde;
            var_dump($limitwaarde);
            $sql = "SELECT * FROM lottogamedata LIMIT :limietwaarde";
            $smt = $this->db->prepare($sql);
            $smt->bindParam("limietwaarde", $limitwaarde, PDO::PARAM_INT);

        }
        else{
            $sql = "SELECT * FROM lottogamedata";
            $smt = $this->db->prepare($sql);
        }

        $smt->execute();
        $lottotabel = $smt->fetchAll(PDO::FETCH_OBJ);

    } catch (PDOException $e) {
        die($e->getMessage());
    }

    return $lottotabel;
}

这是初始化会话的地方:

session_start();
$Winkel = Winkel::getEuroInstantie();
Uitvoer::toonKeuzeMenu();
Uitvoer::extraFunctions();
if (isset($_POST["submitTheSpecifyRequest"])){
    helper::voegToegAanDeSessie($_POST["maxNumbers"]);

}

这是 submitTheSpecifyRequest 按钮:

public static function extraFunctions(){
    ?>
      <form class="form-group" method="post" id="extraOpties">
          <label for="maxNumbers">Limit the results by</label>
          <input name="maxNumbers" class="form-control" id="maxNumbers" type="number" required min="1" value="1">
          <input type="submit" value="Specify your search" class="btn btn-primary" name="submitTheSpecifyRequest" id="submitTheSpecifyRequest"/>
      </form>
    <?php
}

在此先感谢您对我的帮助!

$limitwaarde 似乎不是一个整数,会话存储的变量可能存储为字符串

尝试:

$smt->bindParam(":limietwaarde", intval($limitwaarde), PDO::PARAM_INT);

PDO 的 bindParam 有一个错误,如果您尝试用 PDO::PARAM_INT 绑定一个字符串,它实际上仍然会将它绑定为一个字符串(带引号)。您需要自己将您的值转换为 int:

请注意,您不能在对 bindParam 本身的调用中将其转换为 int,因为它需要一个引用。通过在函数调用中转换内联,您将没有它可以引用的变量,因此您必须事先将其转换为变量。

// won't work:
$limitwaarde = $_SESSION["limiet"];
$smt->bindParam("limietwaarde", (int)$limitwaarde, PDO::PARAM_INT);

// will work:
$limitwaarde = (int)$_SESSION["limiet"];
$smt->bindParam("limietwaarde", $limitwaarde, PDO::PARAM_INT);