Php 我是否正确使用MySQL事务?

Php 我是否正确使用MySQL事务?,php,mysql,sql,Php,Mysql,Sql,我想确认我正在正确使用MySQL事务来正确处理一些关键的事情(没有种族错误等) $mysqli->autocommit(FALSE); $mysqli->query(“更新用户设置余额=余额-$amount,事务=事务+1,发送=发送+$amount,其中email=‘$email’”); $mysqli->query(“更新用户设置余额=余额+$amount,事务=事务+1,recv=recv+$amount,其中email=‘$address’”); $newBalanceQ=$mysqli

我想确认我正在正确使用MySQL事务来正确处理一些关键的事情(没有种族错误等)

$mysqli->autocommit(FALSE);
$mysqli->query(“更新用户设置余额=余额-$amount,事务=事务+1,发送=发送+$amount,其中email=‘$email’”);
$mysqli->query(“更新用户设置余额=余额+$amount,事务=事务+1,recv=recv+$amount,其中email=‘$address’”);
$newBalanceQ=$mysqli->query(“从电子邮件=“$email”的用户中选择余额”);
$newBalance=$newBalanceQ->fetch_row()[0];
如果($newBalance<0){
$mysqli->rollback();
}否则{
$mysqli->commit();
}

或者,您可以在不使用事务的情况下执行此操作,因为您可以将两个查询合并到一个
UPDATE
语句中

UPDATE  users 
SET     balance = balance - (CASE WHEN email = '$email' THEN $amount ELSE $amount * -1 END), 
        transactions = transactions + 1,
        sent = (CASE WHEN email = '$email' THEN sent + $amount ELSE sent END),
        recv = (CASE WHEN email = '$address' THEN recv + $amount ELSE recv END)
WHERE   email IN ('$email','$address')
您正在使用
MySQLi
,但您没有参数化该值,在这种情况下,您仍然容易受到
SQL注入的攻击

UPDATE  users 
SET     balance = balance - (CASE WHEN email = '$email' THEN $amount ELSE $amount * -1 END), 
        transactions = transactions + 1,
        sent = (CASE WHEN email = '$email' THEN sent + $amount ELSE sent END),
        recv = (CASE WHEN email = '$address' THEN recv + $amount ELSE recv END)
WHERE   email IN ('$email','$address')