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);
我的问题是得到这个错误:
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);