2012-05-11 3 views
1

Ok.Codeigniter mysql 프로 시저 다중 변수

$buf = array('something', NULL); //array of vars 
$this->db->query("CALL some_proc(?, ?)", $buf); //calling stored procedure 

을하지만 거대한 배열 (25 ~ 30 개 항목)이있는 경우, 배열을 사용하여 MySQL의 루틴을 호출 할 수있는 부드러운 방법이있다 : 우리는이 같은 CodeIgniter의에서 MySQL의 프로 시저를 호출 할 수 있습니까? 뭔가 더 $ this-> db-> query ("CALL some_proc (?,?,?,? ..."); 사전에 감사!

답변

3

음 ... 전에 $this->db->escape() 수 및 문자열을 구문 분석 .

$arr_cols = array('value_1', 'value_2', 'value_3'); 
foreach(array_keys($arr_cols) as $h) 
    $arr_cols[$h] = $this->db->escape($arr_cols[$h]); 

$str_cols = implode(', ', $arr_cols); 

$this->db->query("CALL some_proc({$str_cols})"); 
+0

중공업하지만 좋은 감사 –

+0

@Robin Castlin :! 내가보기에서 배열을 받고 있어요 ($ email_to = $ this-> 입력 -> 포스트 ('sendMail []');)을 컨트롤러에 전달합니다. o 이것을 모델의 저장 프로 시저에 전달하는 방법은 무엇입니까? –

+0

@GaneshAher 안녕하세요, 귀하의 문제는이 회신에 적절하지 않은 것으로 보입니다. '$ email_to'는 반복해야 할 배열입니다. 너 나에게 여기서 일할 것이 많지 않았어. –

2

그냥 사용 str_repeat() :

$this->db->query("CALL some_proc(?" . str_repeat(",?", count($buf)-1) . ")", $buf); 
+0

나는 그렇게한다. ^. 내 코드가 너무 나쁘다고 두려워한다. –

+1

@skater_nex : 그렇다면 문제는 무엇인가? 여러분이 받아 들인 솔루션은 더 이상 성능이 좋지는 않지만 더 자세한 설명이되어 있습니다. (안전해야하는 준비된 문장이 아니라 SQL 인젝션으로부터 당신을 구하기 위해'escape' 함수에 의존합니다) ... – eggyal

+0

이 동의했습니다. 나는 더 우아한 방법을 원했다. 귀하의 솔루션은 완벽합니다 (광산처럼). 하지만 결코 덜 ... –