问题
I'm trying to pass array as parameter to my stored procedure. But I'm not getting expected result.
I'm trying to send list of emails and ID's from view on button click to controller, and then I'm trying to fetch data from database by passing that list as parameter to my stored procedure.
Here is my code:
View:
<form action="<?= base_url('certificate/sendMail') ?>" method="post">
<table id="example1" class="table table-striped table-bordered" cellspacing="0" width="100%">
<thead>
<tr>
<th>Mail</th>
</tr>
</thead>
<tfoot>
<tr>
<th style="text-align: center;">
<input type="submit" name="submit" value="Send" class="send btn btn-primary btn-xs" disabled="" />
</th>
</tr>
</tfoot>
<tbody>
<tr>
<td style="text-align: center;">
<input type="checkbox" class="checkbox" name="sendMail[]" value="<?= $certify->landlord_main_email; ?>">
</td>
</tr>
</tbody>
</table>
</form>
Here I'm getting list of emails and ID's by checking checkbox.
Controller:
public function sendMail($certID)
{
# code...
if(isset($_POST['submit'])){//to run PHP script on submit
if(!empty($_POST['sendMail'])){
// Loop to store and display values of individual checked checkbox.
foreach($_POST['sendMail'] as $selected){
//echo $selected."</br>";
}
}
}
$result['certMails'] = $this->c->getCertificateByEmail($certID);
$email_to = $this->input->post('sendMail[]');
$body = $this->load->view('Emails/emailAll', '', true);
}
Here I'm trying to get data and send it to email template view.
Model:
public function getCertificateByEmail($certID)
{
# code...
$query = $this->db->query("call getCertificateByEmail($certID)");
if ($query) {
$data = $query->result();
$query->next_result();
$query->free_result();
return $data;
} else {
return false;
}
}
Stored Procedure:
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `Certificate_By_Email`(IN `certID` INT)
BEGIN
SELECT `cert_id`, `cert_user_id`, `cert_landlord_id`,
tbl_landlord.landlord_id, tbl_landlord.landlord_main_email,
`cert_property_id`, tbl_property.property_code,
tbl_property.property_city, tbl_property.property_cluster,
tbl_cluster.cluster_name, `cert_status`, `cert_number`,
tbl_certificates.certificate_name, `cert_issue_date`,
`cert_expiry_date`, `cert_duration`, `cert_updated_date`,
`cert_remarks`, `cert_notes`
FROM `tbl_certificate_details`
LEFT OUTER JOIN tbl_landlord ON tbl_certificate_details.cert_landlord_id = tbl_landlord.landlord_id
LEFT OUTER JOIN tbl_property ON tbl_certificate_details.cert_property_id = tbl_property.property_id
LEFT OUTER JOIN tbl_certificates ON tbl_certificate_details.certificate_id = tbl_certificates.certificate_id
LEFT OUTER JOIN tbl_cluster ON tbl_property.property_cluster = tbl_cluster.cluster_id
LEFT OUTER JOIN tbl_area ON tbl_property.property_area = tbl_area.area_name
WHERE FIND_IN_SET(cert_id, certID);
END$$
DELIMITER ;
Any kind of help is welcome, thanks in advance.
回答1:
- I can't see
$certID
defined anywhere insendMail()
. What value do you get if you print that out? - I'm fairly sure you just use
$this->input->post('sendMail');
instead of$this->input->post('sendMail[]');
to get the array - Have you confirmed that your (unsafe) sql call works with custom values? If it does, make sure you're passing the correct values
Try debugging and troubleshooting and you'll probably find what's the cause.
来源:https://stackoverflow.com/questions/48092525/how-to-pass-array-as-parameter-to-stored-procedure-in-mysql