[英]MySQL running an insert multiple times inside Stored-Procedure
好的,假設我們在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);
}
}
?>
嗯,多次調用您的程序?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.