0

さて、MySQL にこのストアド プロシージャがあり、データを送信するためにこの関数が php で書かれているとしましょう。私はこれらのいずれもテストしていませんが、誰かが試してみたいと感じた場合、それらが一緒に機能することはかなり確信しています. このコードは、コントラクトを作成するという考えに基づいています。clientsテーブルとテーブルに動的な量のクライアントを挿入するにはどうすればよいclients_addressですか? クライアントデータをphpの配列に作成し、クライアントデータを配列サイズを持つ別の変数とともに送信する必要があると考えています.3つのクライアントがある場合、ストアドプロシージャでは、以下のようになります

WHILE (x > 0)
    INSERT INTO `clients`
    INSERT INTO `client_address`
    SET x = x - 1;
END WHILE;

-

DROP PROCEDURE IF EXISTS `create_contract`;
DELIMITER '/';
CREATE PROCEDURE `create_contract` (
    client_first_name VARCHAR(60), 
    client_middle_name VARCHAR(60), 
    client_last_name VARCHAR(60), 
    client_date_of_birth DATETIME, 
    client_street VARCHAR(60), 
    client_apartment VARCHAR(60), 
    client_city VARCHAR(60), 
    client_state VARCHAR(60),  
    client_zip SMALLINT(9),   
    contract_title VARCHAR(60),    
    contract_date DATETIME,    
    contract_file_name VARCHAR(60),
    payor_first_name VARCHAR(60), 
    payor_middle_name VARCHAR(60), 
    payor_last_name VARCHAR(60), 
    payor_date_of_birth DATETIME, 
    payor_address_street VARCHAR(60), 
    payor_address_apartment VARCHAR(60), 
    payor_address_city VARCHAR(60), 
    payor_address_state VARCHAR(60),  
    payor_address_zip SMALLINT(9),  
)

BEGIN

INSERT INTO `clients`(client_first_name,  client_middle_name, client_last_name,  client_date_of_birth)
    VALUES(client_first_name, client_middle_name, client_last_name, client_date_of_birth);

INSERT INTO `client_address` (client_street, client_apartment, client_city, client_state,client_zip)
    VALUES (client_street, client_apartment, client_city, client_state, client_zip);

INSERT INTO `payors` (payor_first_name, payor_middle_name, payor_last_name, payor_date_of_birth)
    VALUES (payor_first_name, payor_middle_name, payor_last_name, payor_date_of_birth);

INSERT INTO `payor_address` (payor_street, payor_apartment, payor_city, payor_state, payor_zip)
    VALUES (payor_street, payor_apartment, payor_city,  payor_state, payor_zip);

INSERT INTO `contracts` (contract_title, contract_date, contract_file_name)
    VALUES (contract_title, contract_date, contract_file_name);

END

<?php
    public function create_new_contract(
            $client_first_name,$client_middle_name,$client_last_name, $client_date_of_birth,
            $client_street,$client_apartment,$client_city,$client_state,$client_zip,
            $contract_name,$contract_date,$contract_file_name,
            $payor_first_name,$payor_middle_name,$payor_last_name, $payor_date_of_birth,
            $payor_street,$payor_apartment,$payor_city,$payor_state,$payor_zip){

        try{
            $query = "CALL create_new_user (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";

            $stmt = $this->DBH->prepare($query);
            $stmt->bindParam(1, $client_first_name, PDO::PARAM_STR);
            $stmt->bindParam(2, $client_middle_name, PDO::PARAM_STR);
            $stmt->bindParam(3, $client_last_name, PDO::PARAM_STR);
            $stmt->bindParam(4, $client_date_of_birth, PDO::PARAM_STR);
            $stmt->bindParam(5, $client_street, PDO::PARAM_STR);
            $stmt->bindParam(6, $client_apartment, PDO::PARAM_STR);
            $stmt->bindParam(7, $client_city, PDO::PARAM_STR);            
            $stmt->bindParam(8, $client_state, PDO::PARAM_STR);         
            $stmt->bindParam(9, $client_zip, PDO::PARAM_INT);

            $stmt->bindParam(10, $contract_name, PDO::PARAM_STR);            
            $stmt->bindParam(11, $contract_date, PDO::PARAM_STR);         
            $stmt->bindParam(12, $contract_file_name, PDO::PARAM_STR); 

            $stmt->bindParam(13, $payor_first_name, PDO::PARAM_STR);
            $stmt->bindParam(14, $payor_middle_name, PDO::PARAM_STR);
            $stmt->bindParam(15, $payor_last_name, PDO::PARAM_STR);
            $stmt->bindParam(16, $payor_date_of_birth, PDO::PARAM_STR);
            $stmt->bindParam(17, $payor_street, PDO::PARAM_STR);            
            $stmt->bindParam(18, $payor_apartment, PDO::PARAM_STR);         
            $stmt->bindParam(19, $payor_city, PDO::PARAM_STR);       
            $stmt->bindParam(20, $payor_state, PDO::PARAM_STR);         
            $stmt->bindParam(21, $payor_zip, PDO::PARAM_INT);
            $results = $stmt->execute();
            if(!$results){
                return 'Something went wrong please try again.';
            }else{
                return 'Thank you, the contracted was created.';                
            }
        } catch(PDOException $e){
                return 'Something went wrong please try again.';
                file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND); 
        }   
    }
?>
4

1 に答える 1

0

ええと、プロシージャを複数回呼び出しますか?

于 2012-10-15T04:52:56.233 に答える