我用when
,then
和else
创建了一个PDO语句。
我唯一的问题是它不想从PDO语句中执行。如果我将整个SQL打印在print_r
中,它将显示一个完美的查询。另外,当我在数据库上执行它时,它可以完美地运行并更新我想要的字段。
public function sellNpcItems($items, $quantity, $npc_id)
{
try
{
$sql = "UPDATE npc_items SET available = CASE item_id";
for($i=0;$i<count($items);$i++)
{
$sql .= " WHEN ".$items[$i]." THEN available - ".$quantity[$i];
}
$sql .= " ELSE available END WHERE npc_id = ".$npc_id;
$sql = $this->dbh->prepare($sql);
$sql->execute(array($npc_id));
$this->dbh->commit();
$result = $sql->fetchAll(PDO::FETCH_ASSOC);
return $result;
}
catch(PDOException $e){echo 'Error ! '.$e->getMessage();die();}
}
上述查询的输出是:
PDOStatement Object ( [queryString] => UPDATE npc_items SET available = CASE item_id WHEN 57 THEN available - 1 ELSE available END WHERE npc_id = 1 )
如果我选择Querystring并将其直接粘贴到我的SQL Workbench中,则直接更新。当我尝试从PHP脚本更新它时。它拒绝更新(没有错误或任何内容(只是什么都没有发生。
你们中的任何人都有解决方案吗?
好吧,我已经解决了问题。有点愚蠢地监督这一问题,但是当您使用this->dbh->prepare()
而没有从 execute
推出的任何变量时,它会失败..并且不会更新。