我一直在尝试根据页面上收到的代码更新值时遇到问题。

例如:

http://example.com/register.php?code=fa82f82712d1(不是实际代码,实际上始终是32个字符的代码)。

我开始交易,并通过以下方式进行更新:

$stmt = $stmt->prepare("UPDATE USER SET GOT_CODE = 1 WHERE CODE = :code");


然后从之前获得的代码中执行$stmt->execute(array(':code' => $code));

但是它从不更新任何内容,我正在运行rowCount()(为我提供“ 0”)并关闭事务,但似乎无法对其进行更新。

列类型为CHAR(32),应与接收到的代码的长度匹配。

是否可能由于数据类型而引起混乱?

最佳答案

也许像这样绑定参数之前:

$stmt2 = $stmt->prepare("UPDATE USER SET GOT_CODE = 1 WHERE CODE = :code");
$stmt2->bindParam(":code", $code, PDO::PARAM_STR);
if ($stmt2->execute()){
        $stmt->commit();
    } else {
        $stmt->rollBack();
    }


编辑:经过其他人的评论。基本就是不要用

$stmt = $stmt->prepare("UPDATE USER SET GOT_CODE = 1 WHERE CODE = :code");


但是给不同的var名称像

$stmt2 = $stmt->prepare("UPDATE USER SET GOT_CODE = 1 WHERE CODE = :code");


因为否则系统将覆盖$ stmt并且不再工作

关于php - 通过PDO准备查询更新表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27503392/

10-12 12:43
查看更多