简单的PDO查询不起作用

时间:2015-02-27 15:14:26

标签: php function oop pdo

我只是在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

提前致谢!

2 个答案:

答案 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插入,这可能不是你的意图。