Mysql
 sql >> база данни >  >> RDS >> Mysql

PHP PDO MySQL Структура на транзакционен код

Някои общи бележки:Не използвайте bindParam() освен ако не използвате процедура, която променя стойността на параметъра. Затова use bindValue() . bindParam() приема стойността на аргумента като реферирана променлива. Това означава, че не можете да направите $stmt->bindParam(':num', 1, PDO::PARAM_INT); - предизвиква грешка. Освен това PDO има свои собствени функции за контролиране на транзакции, не е необходимо да изпълнявате заявки ръчно.

Пренаписах леко кода ви, за да хвърля малко светлина върху това как може да се използва PDO:

if($_POST['groupID'] && is_numeric($_POST['groupID']))
{
    // List the SQL strings that you want to use
    $sql['privileges']  = "DELETE FROM users_priveleges WHERE GroupID=:groupID";
    $sql['groups']      = "DELETE FROM groups WHERE GroupID=:groupID"; // You don't need LIMIT 1, GroupID should be unique (primary) so it's controlled by the DB
    $sql['users']       = "DELETE FROM users WHERE Group=:groupID";

    // Start the transaction. PDO turns autocommit mode off depending on the driver, you don't need to implicitly say you want it off
    $pdo->beginTransaction();

    try
    {
        // Prepare the statements
        foreach($sql as $stmt_name => &$sql_command)
        {
            $stmt[$stmt_name] = $pdo->prepare($sql_command);
        }

        // Delete the privileges
        $stmt['privileges']->bindValue(':groupID', $_POST['groupID'], PDO::PARAM_INT);
        $stmt['privileges']->execute();

        // Delete the group
        $stmt['groups']->bindValue(":groupID", $_POST['groupID'], PDO::PARAM_INT);
        $stmt['groups']->execute();

        // Delete the user 
        $stmt['users']->bindParam(":groupID", $_POST['groupID'], PDO::PARAM_INT);
        $stmt['users']->execute();

        $pdo->commit();     
    }
    catch(PDOException $e)
    {
        $pdo->rollBack();

        // Report errors
    }    
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ГРЕШКА 1115 (42000):Неизвестен набор от знаци:'utf8mb4'

  2. MySQL 8 Общи изрази за таблица CTE

  3. Как да поръчам по максимум две колони, които могат да бъдат нулеви в MySQL?

  4. MySQL Group_Concat повтарящи се стойности

  5. Как мога да търся по емоджи в MySQL, използвайки utf8mb4?