Làm thế nào để thực hiện các thủ tục được lưu trữ trong drupal?


9

Tôi có một trang web làm rất nhiều công việc về dữ liệu tài chính. Nó liên quan đến các hoạt động trên khối lượng lớn dữ liệu hầu hết thời gian. Do đó tôi thấy hữu ích khi thực hiện các thao tác đó trong các thủ tục lưu trữ mysql. Tôi đã lưu trữ các thủ tục trong cơ sở dữ liệu của tôi. Tôi muốn biết làm thế nào tôi có thể thực hiện các thủ tục được lưu trữ trong drupal? Có phương pháp nào tốt để thực hiện các thủ tục được lưu trữ trong drupal không? Làm thế nào drupal xử lý các thủ tục lưu trữ nói chung? Hoặc chúng ta chỉ phải sử dụng PHP để thực hiện các thủ tục được lưu trữ?


Bạn đã tìm kiếm trên web? Google trả về một số kết quả cho "thủ tục lưu trữ drupal" có vẻ thú vị. Bạn đã thử mã chưa? Bạn có thể cho chúng tôi biết những gì đã làm việc, và những gì không?
marcvangend

1
Vâng, tôi đã tìm kiếm trong google. Dường như cần vài dòng mã để thực thi một thủ tục được lưu trữ với các tham số. Có bất kỳ chức năng trợ giúp nào trong Drupal API để thực hiện thủ tục được lưu trữ không?
Mahesh Bhat

Câu trả lời:


11

Giả sử bạn đang sử dụng Drupal 7, bạn có thể sử dụng mã như sau:

// Get the Drupal database connection and change the statement class to PDOStatement.
// Save the current class for cleanup later.
$conn = Database::getConnection();
$saved_class = $conn->getAttribute(PDO::ATTR_STATEMENT_CLASS);
$conn->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('PDOStatement'));

// Prepare the statement and bind params
$statement = $conn->prepare("Call GetNodeList(?,?)");

$op_status = $statement->bindParam(1, $node_type, PDO::PARAM_STR | PDO::PARAM_INPUT_OUTPUT, 25);
$op_status = $statement->bindParam(2, $publish_state, PDO::PARAM_INT | PDO::PARAM_INPUT_OUTPUT);

// Execute the statement and reset the connection's statement class to the original.
$exec_result = $statement->execute();
$conn->setAttribute(PDO::ATTR_STATEMENT_CLASS, $saved_class);

// Get your data
while ($row = $statement->fetchColumn(0)) {
  // ...
}

Phương pháp đó hoàn toàn được loại bỏ khỏi bài viết này và đã làm việc tốt cho tôi trong quá khứ.


cảm ơn vì đã loại bỏ nó trang được tham chiếu với "bài viết này" không giải quyết.
cdmo

0

Không chắc đây có phải là cách chính xác cho việc này không, nhưng nó đã làm việc với tôi. Tôi có một hệ thống kế thừa chia sẻ cùng một máy chủ cơ sở dữ liệu Postgres mà Drupal làm.

Trong một trình xử lý đệ trình, tôi cần gửi dữ liệu đến hệ thống cũ này có thủ tục được lưu trữ (Postgres gọi chúng là các hàm) để xử lý dữ liệu:

// Get legacy database connection set-up in settings.php
Database::getConnection('default', 'legacy')
  ->query('SELECT * FROM stored_procedure(:named_parameter_1, :named_parameter_2, ...);', [
    ':named_parameter_1' => $value_1,
    ':named_parameter_1' => $value_2,
    ...
  ]);

Điều này có dữ liệu thành công vào hệ thống di sản của tôi

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.