pdo准备好的声明不更新
这似乎并没有更新记录。任何人都能看到为什么pdo准备好的声明不更新
try {
$status = 'OK';
$messId = 179981;
#die(var_dump($messId, $this->campaignId, $this->userId, $status));
$stmt = $this->dbh->prepare("UPDATE tbl_inbound_responses SET status = :status, sent = '1' WHERE fk_userId = :userId AND fk_campaignId = :campId AND pk_messageId = :messId") or die("Prepare Error");
$stmt->bindParam(':userId', $this->userId);
$stmt->bindParam(':campId', $this->campaignId);
$stmt->bindParam(':messId', $messId);
$stmt->bindParam(':status', $status);
$stmt->execute();
#var_dump($stmt->debugDumpParams(), $stmt->errorInfo());
if($err = $stmt->errorInfo()) {
if($err[0] != '00000') {
var_dump($stmt->debugDumpParams());
}
}
}
catch(PDOException $e) {
die($e->getMessage());
}
脚本也有
$this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
集和
$stmt->debugDumpParams();
报告:
SQL: [120] UPDATE tbl_inbound_responses SET status = :status, sent = '1' WHERE fk_userId = :userId AND fk_campaignId = :campId AND pk_messageId = :messId
Params: 4
Key: Name: [7] :userId paramno=-1 name=[7] ":userId" is_param=1 param_type=2
Key: Name: [7] :campId paramno=-1 name=[7] ":campId" is_param=1 param_type=2
Key: Name: [7] :messId paramno=-1 name=[7] ":messId" is_param=1 param_type=2
Key: Name: [7] :status paramno=-1 name=[7] ":status" is_param=1 param_type=2
NULL array(3) { [0]=> string(5) "00000" [1]=> NULL [2]=> NULL }
干杯。
编辑:
我不相信这是一样的:
PHP PDO Update prepared statement problem或PHP PDO Prepared statement query not updating record
如果您没有收到异常,那么就没有错SQL查询或PDO如何破坏它。最可能的原因是参数问题。所以尝试调试它。用您的->bindParam
来替换您的电话:
$params = array(
':userId' => $this->userId,
':campId' => $this->campaignId,
':messId' => $messId,
':status' => $status,
);
var_dump($params);
$stmt->execute($params);
这可能会提示。如果失败,请尝试使用枚举参数?
。无论如何,在SQL中用原始“字符串值”重新运行相同的查询以进行测试(在您选择的任何查询工具中)。
感谢@Mario,它必须是事做绑定PARAMS。 – 2011-04-08 14:16:32
它只能是params。你的代码没有问题。所以:} – mario 2011-04-08 14:19:18
问题在您的查询!用“”而不是‘和’:
$stmt = $this->dbh->prepare("UPDATE tbl_inbound_responses SET status = :status, sent = 1 WHERE fk_userId = :userId, fk_campaignId = :campId, pk_messageId = :messId") or die("Prepare Error");
这个问题和解决方案已经超过3年了。感谢您的意见,但很久以前就解决了。 – 2014-07-10 10:41:56
@mario,感谢您的格式:d – 2011-04-08 13:38:15