2016-05-30 81 views
1

我知道有多个教程和stackoverflow答案为上述问题。但没有任何帮助。Mysql存储从codeigniter程序调用

从我的控制器我传递我的数据作为数组。 现在存储过程创建看起来像这样

BEGIN 

DECLARE recCnt Int DEFAULT 0; 
#DECLARE rm_id_val Bigint(19); 
select count(*) into recCnt from users where user_name = user_name_in; 
IF recCnt > 0 THEN 
SET rm_id_val = 0; 
ELSE 

#SET rm_id = rm_id_gen(); 

INSERT INTO users(user_category, user_name, facebook_id, 
password, email, mobile_no, city_name, country_name, view_count, user_type, signup_date, updated_on) 
values (user_cat_in,user_name_in, facebook_id_in, 
     password_in, email_in, mobile_no_in, city_name_in, country_name_in, 0, user_type_in, CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP()); 

select rm_id into rm_id_val from users where user_name=user_name_in; 

INSERT INTO activation (rm_id, no_of_attempt, activation_key, activation_status) 
VALUES (rm_id_val,0, activation_key_in, 0); 
END IF; 
END 

这里rm_id_val是OUT PARAM和其余都在

我通过$ data数组进行建模和模型看起来像这样

$sql = "CALL signup"; 
    $query = $this->db->query($sql, $data); 
    return $query->result(); 

不用说它不起作用。然后我尝试使用来自stackoverflow的解决方案

$this->db->trans_start(); 
    $p1 = $data['user_cat_in']; 
    $p2 = $data['user_name_in']; 
    $p3 = $data['facebook_id_in']; 
    $p4 = $data['password_in']; 
    $p5 = $data['email_in']; 
    $p6 = $data['mobile_no_in']; 
    $p7 = $data['city_name_in']; 
    $p8 = $data['country_name_in']; 
    $p9 = $data['view_count']; 
    $p10 = $data['user_type_in']; 
    $p11 = $data['signup_date']; 
    $p12 = $data['updated_on']; 
    $success = $this->db->query("CALL signup('$p1','$p2','$p3','$p4','$p5','$p6','$p7','$p8','$p9','$p10',@rm_id_val);"); 
    print_r("CALL signup('$p1','$p2','$p3','$p4','$p5','$p6','$p7','$p8','$p9','$p10',@rm_id_val);"); exit(); 
    $out_param_query = $this->db->query('select @rm_id_val as out_param;'); 
    $this->db->trans_complete(); 
    return $success; 

那么没有再次输出。

然后我试图MySQL的控制台并执行以下

CALL  signup('musician','acacascsacsca','0','cascsacsac','ascascascacacac','acacac','acascacsacs','India','0','1',@rm_id_val); 
select @rm_id_val as rmid; 

这导致

#1414 - OUT or INOUT argument 1 for routine ragamixdb.signup is not a variable or NEW pseudo-variable in BEFORE trigger 

请帮我得到这个PROC通过笨 感谢打来电话,感谢

回答

0

有了你试图设置mysql变量。 尝试使用此语法将php变量赋值给mysql变量。

SET @running_sum = 0; 

使用在这样CI设置syntaxs的,

$this->db->query("SET @your_mysql_variable = ".$your_php_variable); 

$this->db->query("SET @your_another_mysql_variable = ".$your_another php_variable); 

$this->db->query("CALL your_procedure()"); 
+0

我会尝试, - 但你能告诉我,为什么mysql的控制台是给我的错误? SP是否正确?也请详细说明为什么我需要将mysql变量设置为PHP – Subhajit