PHP PDO相关:更新SQL语句不更新数据库的内容

时间:2010-03-05 17:49:59

标签: php sql mysql pdo

我正在尝试使用PHP脚本中的预准备语句来实现更新语句,但它似乎没有更新数据库中的记录,我不知道为什么如此,如果你能分享一些见解。

代码

$query = "UPDATE DatTable SET DF_PARTY_ID = :party_id,
          DF_PARTY_CODE = :party_code,
          DF_CONNECTION_ID = :connection_id WHERE DF_PARTY_ID = ':party_id'";
$stmt = $this->connection->prepare($query);
$stmt->bindValue(':party_id', $data[0], PDO::PARAM_INT);
$stmt->bindValue(':party_code', $data[1], PDO::PARAM_INT);
$stmt->bindValue(':connection_id', $data[2], PDO::PARAM_INT);
$stmt->execute();

Inspiring solution导致了这种方法。我该如何解决这个问题?

4 个答案:

答案 0 :(得分:0)

确保数据库中存在您尝试更新的party_id

此外,如果您的表格为InnoDB,请确保在更新后启用autocommit或发出明确提交。

答案 1 :(得分:0)

不必猜测,必须实施基本的错误处理:

$arr = $stmt->errorInfo();
print_r($arr);

答案 2 :(得分:0)

可能没有帮助,但为什么你只有3个变量,当有4个时?我不能说我在PHP中有这样的经验,但在Perl和Oracle中它会引发错误。我尝试绑定2个SET和1个WHERE,并删除第一个赋值,看看是否有效。

答案 3 :(得分:0)

我不确定你是否想做你想做的事。

你的UPDATE语句基本上是说基于NEW值更新键和两个值,因为party_id在SET和WHERE子句中。

您可能希望将准备好的陈述更改为:

UPDATE DatTable SET DF_PARTY_ID =:party_id, DF_PARTY_CODE =:party_code, DF_CONNECTION_ID =:connection_id WHERE DF_PARTY_ID =':old_party_id'

将您的新party_id值绑定到:party_id,将CURRENT值绑定到:old_party_id