【问题标题】:Not updating two tables using inner join with PDO? [duplicate]不使用带有 PDO 的内部联接更新两个表? [复制]
【发布时间】:2015-08-13 00:54:49
【问题描述】:

我想使用 PDO 更新两个表。

SQLSTATE[HY093]:参数号无效:绑定变量的数量与标记的数量不匹配

我想同时更新两个表中的用户名和密码。两者都有一个user_id 字段。

public function update($user_id, $username, $password, $province) {
    try {
        $stmt = $this->db->prepare("UPDATE login INNER JOIN sample ON sample.username = sample.username SET login.username = :username, sample.username=:username WHERE user_id=:user_id");
        //$stmt=$this->db->prepare("UPDATE login SET username=:username,password=:password,province=:province WHERE user_id=:user_id");
        $stmt->bindparam(":username", $username);
        $stmt->bindparam(":password", $password);
        $stmt->bindparam(":province", $province);
        $stmt->bindparam(":user_id", $user_id);
        $stmt->execute();

        return true;
    } catch (PDOException $e) {
        echo $e->getMessage();
        return false;
    }
}

【问题讨论】:

    标签: php pdo


    【解决方案1】:

    您需要按以下方式更改准备好的查询

    UPDATE login INNER JOIN sample ON (login.user_id = sample.user_id)
    SET login.username = :username, sample.username = :username
    WHERE login.user_id = :user_id AND sample.user_id = :user_id
    

    这里是a visual explanation of SQL Joins

    【讨论】:

    • 它工作!非常感谢..你能解释一下为什么我的代码不起作用吗?
    • 你必须在WHEREINNER JOIN ... ON 中使用表名,你需要比较两个表,所以你不能像sample.username = sample.username 那样做
    猜你喜欢
    • 2017-01-15
    • 1970-01-01
    • 2011-03-28
    • 2011-12-01
    • 1970-01-01
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多