使用PDO在1个查询中更新多个表记录

时间:2013-05-30 13:00:53

标签: php mysql pdo

我试图弄清楚如何使用PDO更新我的表 - 我需要同时更新2条记录,但我不确定这是如何工作的。

我有会话用户和我的“友好用户”。

我的朋友将在我的桌子上获得10个学分左右,并且当他们与他成为朋友时,他可以为其他用户提供X学分。

// $uid is my logged in session user
// $follow_id is the id of the person were trying to befriend

//我对这个问题的整个过程感到困惑吗? 1,减少来自befirended用户的信用,然后将信用添加到当前会话用户列?

$upd_stmt = $conn->prepare('SELECT * FROM users WHERE user_id=? ');
$upd_stmt->bindParam(1, $uid, PDO::PARAM_INT);
$upd_stmt->execute();

while( $row = $upd_stmt->fetch(PDO::FETCH_ASSOC) ) {

    $row['credits_offered'];
} 

2 个答案:

答案 0 :(得分:1)

简短的回答是,是的,您需要编写两个查询,一个要减去,另一个要添加。

您可以在一个查询中执行此操作,但我建议您在两个查询中执行此操作以获得更好的可读性。我还建议通过事务来完成它,如果第一个查询成功执行但第二个查询没有成功,你会想要回滚它。

PHP + MySQL transactions examples

答案 1 :(得分:1)

这是交易的目的。您不需要在一个查询中执行此操作以确保它们都已成功执行。

$dbh->beginTransaction();

$addQuery = "UPDATE ...";
$subtractQuery = "UPDATE ...";

$sth = $dbh->exec($addQuery);
$sth = $dbh->exec($subtractQuery);

$dbh->commit(); // or $dbh->rollback();

在此处详细了解交易:http://en.wikipedia.org/wiki/Database_transaction

短版 - 它们确保您的所有查询都成功执行,或者没有。