0

好的,假设我在 MySQL 中有这个存储过程,并用 php 编写了这个函数来发布数据。我还没有测试过这些,但我相当肯定如果有人想尝试它们,它们会一起工作。此代码基于创建合约的想法。我将如何将动态数量的客户插入clientsclients_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 回答