PDO MYSQL仅在更新时才更新

haw*_*row 6 php mysql sql pdo prepare

我有一个网络程序,允许管理员更新用户的信息......话虽如此,我只想要更新的列确实已经'更新'...

我已经对此进行了相当多的研究,似乎所有方法都使用过时的查询,它们没有利用prepare语句来逃避输入......

有人可以帮我说说吗?

基本上在伪代码中: Update FIRSTNAME if $editedUserdata['firstname'] != FIRSTNAME, LASTNAME if $editedUserData['lastname']!= LASTNAME ...等...

这是我对邮政编码的看法......

        $password = sha1($password);
        $editedUserData = array(
              'firstname' => $firstname,
              'lastname' => $lastname,
              'username' => $username,
              'password' => $password,
              'cellphone' => $cellphone,
              'security_level' => $seclvl,
              'email' => $email,
              'direct_phone' => $direct,
              'ext_num' => $extension,
              'is_active' => $userflag
            );
Run Code Online (Sandbox Code Playgroud)

那应该是这样的

$query = $this->db->prepare('UPDATE FIRSTNAME if(?) IS NOT FIRSTNAME, LASTNAME if(?) IS NOT LASTNAME, USERNAME if (?) IS NOT USERNAME.... VALUES (:firstname, :lastname, :username).....'

if ($query -> execute($editedUserData)) {
    more code....
Run Code Online (Sandbox Code Playgroud)

Old*_*der 20

根据MySQL文档 - 参考:(http://dev.mysql.com/doc/refman/5.0/en/update.html)

"如果你将列设置为它当前具有的值,MySQL会注意到这一点并且不会更新它."

  • 触发器似乎以两种方式触发http://stackoverflow.com/questions/6296313/mysql-trigger-after-update-only-if-row-has-changed (2认同)

Pau*_*lva 5

也许我不理解你试图解决的问题,但你不必测试字段值是否确实改变了.

如果字段值为"A"并且您在那里放置"A"则保持不变,否则如果您放置"B"它将按预期更新

准备好的陈述就像是

$stmt = $dbh->prepare("
    UPDATE table_name
    SET
        field1 = :value1,
        field2 = :value2
    WHERE
        field0 = :key
");

$stmt->bindParam(':value1', $value1, PDO::PARAM_STR);
$stmt->bindParam(':value2', $value2, PDO::PARAM_STR);
$stmt->bindParam(':key', $key, PDO::PARAM_INT);

$stmt->execute()
Run Code Online (Sandbox Code Playgroud)