Мои вопросы получить эту ошибку:

SQLSTATE [42000]: синтаксическая ошибка или нарушение доступа: 1064 В синтаксисе SQL есть ошибка; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с '' 1 '' в строке 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
}

Заранее спасибо за помощь!

0
Steven 27 Май 2017 в 18:58

2 ответа

Лучший ответ

В bindParam PDO есть ошибка, при которой, если вы попытаетесь связать строку с PDO::PARAM_INT, она все равно будет фактически связывать ее как строку (с кавычками). Вам нужно конвертировать ваше значение в int самостоятельно:

Обратите внимание, что вы не можете привести его к int в вызове самого bindParam, потому что он ожидает ссылку. При приведении inline в вызове функции у вас не будет переменной, на которую она может ссылаться, поэтому вы должны привести ее к переменной заранее.

// 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);
0
rickdenhaan 27 Май 2017 в 16:19

Кажется, что $ limitwaarde не является int, переменные, сохраненные в сеансе, могут быть сохранены как строки

Пытаться :

$smt->bindParam(":limietwaarde", intval($limitwaarde), PDO::PARAM_INT);
0
D. Peter 27 Май 2017 в 16:20