php - 如何将数组作为参数传递给mysql中的存储过程?

标签 php mysql stored-procedures parameters codeigniter-3

我正在尝试将数组作为参数传递给我的存储过程。但我没有得到预期的结果。

我尝试将电子邮件和 ID 列表从单击按钮时的 View 发送到 Controller ,然后尝试通过将该列表作为参数传递给我的存储过程来从数据库中获取数据。

这是我的代码:

查看:

<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>

在这里,我通过选中复选框来获取电子邮件和 ID 的列表。

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);
    }

在这里,我尝试获取数据并将其发送到电子邮件模板 View 。

型号:

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;
        }
    }

存储过程:

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 ;

欢迎任何形式的帮助,提前致谢。

最佳答案

  1. 我在 sendMail() 中的任何位置都看不到定义的 $certID。如果你打印出来你会得到什么值(value)?
  2. 我相当确定您只是使用 $this->input->post('sendMail'); 而不是 $this->input->post('sendMail[] '); 获取数组
  3. 您是否确认您的(不安全)sql 调用适用于自定义值?如果是这样,请确保您传递了正确的值

尝试调试和故障排除,您可能会找到原因。

关于php - 如何将数组作为参数传递给mysql中的存储过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48092525/

相关文章:

mysql - 有什么方法可以使用 python 来对齐 mysql 表内的数据吗?

mysql - 如何进行利用 MySQL 后期行查找的 ORM 查询?

sql - 重复更新时的mysql条件插入 - 多条记录

asp.net-mvc-3 - 带有存储过程的 DDD 规范模式

php - 500 内部服务器错误 PHP 超时

php - 通过带有数组的 php 发布到表单

php - 链接用 C 编写的 PHP 扩展

php - 我无法在 php 中设置主页面/详细信息页面

MySQL 行为不正常

sql - 如何使用 csv 格式的 where 子句执行 SQL select 语句?