我只是在OOP编程的新手,所以即时编写一个函数,但它给出了一个错误,我认为我使用PDO错了,实际上我现在肯定,但我现在不知道如何解决它。这是我目前使用的代码:
public function takedrugs($soort, $hoeveelheid, $id){
$conn = $this->conn;
$drugsophalen = $conn->prepare('SELECT * FROM gebruikers WHERE id=:id');
$drugsophalen->execute(array(':id' => $id));
$result = $drugsophalen->fetch();
$huidigdrugs = $result[$soort];
if($huidigdrugs >= $hoeveelheid){
//Voldoende drugs dus drugs afnemen
$drugsafnemen = $conn->prepare('UPDATE gebruikers
SET :soort = :soort - :hoeveelheid,
WHERE id = :id');
$drugsafnemen->execute(array(
':soort' => $soort,
':hoeveelheid' => $hoeveelheid,
':id' => $id));
} else {
return false;
}
}
所以当我使用这个函数时,我得到一个错误,它的全部是关于SET:soort =:soort - :hoeveelheid。
这是我得到的错误:致命错误:未捕获的异常' PDOException' with message' SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;检查与您的MySQL服务器版本相对应的手册,以便在大麻'大麻附近使用正确的语法。 ='大麻' - ' 2000',WHERE id'在第2行'在
我希望有些人现在如何解决它,因为我不:S
提前致谢!
答案 0 :(得分:1)
您无法在PDO info中绑定列名称查看复杂案例。
另外,正如Jason所述,关于延迟绑定使用bindParam
OR bindValue
TRY
$drugsafnemen = $conn->prepare('UPDATE gebruikers
SET $soort = $soort - :hoeveelheid,
WHERE id = :id');
$drugsafnemen->bindParam(':hoeveelheid', $hoeveelheid, PDO::PARAM_INT);
$drugsafnemen->bindParam(':id', $id, PDO::PARAM_INT);
$drugsafnemen->execute();
答案 1 :(得分:0)
你有两个问题:
首先,使用execute()
所有值都被视为字符串。这会导致语法错误:
UPDATE gebruikers SET field = 'Cannabis' - '2000' ...
我认为这不是你的意图。相反,请使用bindParam()
,以便将这些参数定义为整数。
$drugsafnemen->bindParam(':soort', $soort, PDO::PARAM_INT);
其次,您应该动态设置列名(:soort
)。因此,它也会被$soort
插入,这可能不是你的意图。