Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

PHP PDO MySQL Cấu trúc mã giao dịch

Một số lưu ý chung:Không sử dụng bindParam() trừ khi bạn sử dụng thủ tục sửa đổi giá trị của tham số Do đó, hãy use bindValue() . bindParam () chấp nhận giá trị đối số như một biến được tham chiếu. Điều đó có nghĩa là bạn không thể thực hiện $stmt->bindParam(':num', 1, PDO::PARAM_INT); - nó phát sinh lỗi. Ngoài ra, PDO có các chức năng riêng để kiểm soát các giao dịch, bạn không cần phải thực hiện các truy vấn theo cách thủ công.

Tôi đã viết lại mã của bạn một chút để làm sáng tỏ cách PDO có thể được sử dụng:

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. Làm thế nào để chèn hình ảnh trong blob trong bảng mysql chỉ sử dụng cú pháp sql (không có PHP)?

  2. ORDER BY NULL trong MySQL

  3. LỖI 2002 (HY000):Không thể kết nối với máy chủ MySQL cục bộ thông qua socket '/var/run/mysqld/mysqld.sock' (2)

  4. Sao chép / đồng bộ hóa db Firebird cục bộ sang db trực tuyến

  5. mySQL select IN range