dto5637 2019-01-28 11:18
浏览 85

如果参数是数组变量,如何在codeigniter模型中调用存储过程?

Controller file.

public function insert()
  {
    $data = array(
      'vndr_name' => $this->input->post('vndr_name'),
      'vndr_phone' => $this->input->post('vndr_phone'),
      'vndr_mobile' => $this->input->post('vndr_mobile'),
      'vndr_gst' => $this->input->post('vndr_GST'),
      'vndr_pan' => $this->input->post('vndr_PAN'),
      'vndr_addressLine1' => $this->input->post('vndr_addr_line1'),
      'vndr_addressLine2' => $this->input->post('vndr_addr_line2'),
      'vndr_city' => $this->input->post('vndr_city'),
      'vndr_state' => $this->input->post('vndr_state'),
      'vndr_zipcode' => $this->input->post('vndr_ZIP'),
      'vndr_enrldate' => $this->input->post('enrlmnt_date')
    );
    $udata = $this->Vendor_model->insert($data);
    //print_r($udata);
    if($udata !== 0)
    {
      //print_r("$udata");
      echo 'success';
      exit;
    }
    else
    {
      echo 'failed';
      exit;
    }
  }

model file I have not used the OUT parameter since I am trying to insert the values first. Is there any other alternative way for calling stored procedure if the parameter is array variable.

class Vendor_model extends CI_Model {

  public function insert($id)
  {
    //$this->db->query("CALL sp_select_vendor()");
    //$userlevel = $this->db->insert('tbl_Vendor', $id);
    $userlevel= $this->db->query("CALL sp_insert_vendor()");

    return $userlevel;
    if($userlevel->num_rows() > 0)
    {
      $row = $userlevel->row();
      return $row;
    }
    else
    {
      return $userlevel->num_rows();
    }
  }

Stored procedure file

DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_insert_vendor`(IN vname LONGTEXT, IN vphone LONGTEXT, IN vmobile LONGTEXT, IN vgst LONGTEXT, IN vpan LONGTEXT, IN vadd1 LONGTEXT, IN vadd2 LONGTEXT, IN vcity LONGTEXT, IN vstate LONGTEXT, IN vzip LONGTEXT, IN vedate LONGTEXT)
BEGIN
INSERT INTO tbl_Vendor (vndr_name,vndr_phone,vndr_mobile,vndr_gst,vndr_pan,vndr_addressLine1, vndr_addressLine2, vndr_city, vndr_state,vndr_zipcode, vndr_enrldate) VALUES (vname,vphone,vmobile,vgst, vpan,vadd1,vadd2,vcity, vstate, vzip, vedate);
END$$
DELIMITER ;
  • 写回答

1条回答 默认 最新

  • dougourang1856 2019-01-28 11:27
    关注

    Well... You can $this->db->escape() them before and parse string.

    $data = array(
          'vndr_name' => $this->input->post('vndr_name'),
          'vndr_phone' => $this->input->post('vndr_phone'),
          'vndr_mobile' => $this->input->post('vndr_mobile'),
          'vndr_gst' => $this->input->post('vndr_GST'),
          'vndr_pan' => $this->input->post('vndr_PAN'),
          'vndr_addressLine1' => $this->input->post('vndr_addr_line1'),
          'vndr_addressLine2' => $this->input->post('vndr_addr_line2'),
          'vndr_city' => $this->input->post('vndr_city'),
          'vndr_state' => $this->input->post('vndr_state'),
          'vndr_zipcode' => $this->input->post('vndr_ZIP'),
          'vndr_enrldate' => $this->input->post('enrlmnt_date')
        );
    foreach(array_keys($data) as $h)
        $arr_cols[$h] = $this->db->escape($arr_cols[$h]);
    
    $str_cols = implode(', ', $arr_cols);
    
    $this->db->query("CALL sp_insert_vendor({$str_cols})");
    
    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器