【问题标题】:PDO update returns success, but doesn't update the databasePDO 更新返回成功,但不更新数据库
【发布时间】:2016-03-23 05:34:04
【问题描述】:

我正在使用 PDO 更新表中的列。它运行良好,execute() 返回1(成功)。但是,当我检查数据库时,status 列中的值没有改变。

/*
 * Add jobs to the beanstalkd queue
 */
foreach($jobs as $job) {

    $pheanstalk->useTube('scraper')->put(json_encode([
        'username' => $job['username'],
        'password' => $job['password'],
        'proxy'    => $job['proxy'],
        'gender'   => $job['gender'],
        'age'      => $job['age'],
        'device'   => $job['device']
    ]));

    /*
     * Update the row in the database and change its status to "queued"
     */
    try {
        $sql = "UPDATE cron_jobs SET status = :status WHERE id = :cid";
        $dbh->prepare($sql);
        $sth->bindValue(":status", "queued");
        $sth->bindValue(":cid", $job['cid']);
        print $sth->execute();
    } catch(PDOException $e) {
        syslog(LOG_ERR, $e->getTraceAsString());  
        exit;
    }    
}

有什么想法吗?它没有到达catch 块,并且没有发生异常。

【问题讨论】:

  • 再次检查您的 cid 值。确保 $job['cid'] 具有正确的值并且表中有相应的行。如果没有错误并且您从 PDO 获得了成功响应,则可能意味着更新查询执行良好并且更新了错误的行或更新了 0 行。
  • 我检查了这些值,它们存在且正确。
  • 在这种情况下不是。这非常令人困惑,因为当使用相同的凭据从 mysql shell 运行相同的查询时,它会起作用,因此用户具有更新权限。
  • 已修复,已发布答案。是个愚蠢的错误。

标签: php mysql pdo


【解决方案1】:

发现错误。这个:

$dbh->prepare($sql);

应该是:

$sth = $dbh->prepare($sql);

我在上面的脚本中有另一个查询,我经常重复使用变量名。我完全忘了添加变量。最愚蠢的错误总是最能抓住你。

【讨论】:

    【解决方案2】:

    也许你可以使用提交。

    $dbh->beginTransaction();
    //you code
    $dbh->commit();
    

    检查 PDO 文档。 :)

    【讨论】:

    • 这将如何解决问题?我每次只做一笔交易,它们不相互依赖。它应该可以在不需要事务的情况下工作。
    • 检查数据库配置。这个问题是 Commit Config。
    • 问题已解决,与您的建议无关。检查我自己的答案。
    猜你喜欢
    • 2020-07-20
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-19
    相关资源
    最近更新 更多