【发布时间】: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 运行相同的查询时,它会起作用,因此用户具有更新权限。
-
已修复,已发布答案。是个愚蠢的错误。