突然密码列抛出:SQLSTATE [42S22]:找不到列

时间:2013-09-18 06:58:06

标签: php mysql pdo

我正在尝试使用PHP PDO在我的dev数据库中进行一次性替换纯文本密码(见下文)。

我使用了许多其他PDO INSERT和UPDATE语句而没有任何问题 - 或者至少没有这个问题,所以这里出了什么问题?它似乎突然将列名password转换为保留字,并将列名设置为哈希值!为什么现在这是一个问题,但从来没有更新密码和其他成员详细信息? (尝试使用和不使用反引号。)

foreach($pwdArr as $key => $value)
{
        $value = strtolower ($value);
        $value = password_hash($value, PASSWORD_DEFAULT);
        $updatePwdSQL = "UPDATE `member` SET `password` = $value WHERE `id` = $key";
    $update = $PDOdbObject->prepare($updatePwdSQL);
        $update->execute();
}

谢谢,如果有人可以澄清!

2 个答案:

答案 0 :(得分:0)

您获得的错误很奇怪,但我认为您应该尝试将查询更改为:

 $updatePwdSQL = "UPDATE `member` SET `password` = '$value' WHERE `id` = $key";

您应该在$value

周围添加引号

注:
Passerby上面发表的评论是一个很好的评论,建议您接受它!

答案 1 :(得分:0)

正确的方法就是这样,使用PDO:bindValue for foreach

foreach($pwdArr as $key => $value)
{
        $value = strtolower ($value);
        $value = password_hash($value, PASSWORD_DEFAULT);
        $updatePwdSQL = "UPDATE `member` SET `password` = :value WHERE `id` = :key";
        $update = $PDOdbObject->prepare($updatePwdSQL);
        $update->bindValue (':value', $value);
        $update->bindValue (':key', $key, PDO::PARAM_INT);
        $update->execute();
}