【问题标题】:Codeigniter mysql procedure multiple variablesCodeigniter mysql程序多变量
【发布时间】:2012-05-19 22:38:28
【问题描述】:

好的。我们可以像这样在 Codeigniter 中调用 MySQL 过程:

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

但如果我有巨大的数组(25-30 项),有没有更流畅的方法来使用数组调用 MySQL 例程?比 $this->db->query("CALL some_proc(?, ?, ?, ? ..."); 更好的东西 提前致谢!

【问题讨论】:

    标签: mysql arrays codeigniter stored-procedures


    【解决方案1】:

    只需使用str_repeat():

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

    【讨论】:

    • @skater_nex:那么,有什么问题呢?您接受的解决方案不再具有更高的性能,而是更加冗长(并且依赖于escape 函数来使您免于 SQL 注入,而不是应该更安全的准备好的语句)...
    • 同意。我想要更优雅的方式。您的解决方案是完美的(就像我的一样)并且有效。但永远不会少......
    • 假设:我想要替代解决方案。
    【解决方案2】:

    嗯...你可以在之前$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})");
    

    【讨论】:

    • @Robin Castlin:我从视图( $email_to = $this->input->post('sendMail[]'); )获取一个数组到控制器。 o如何将其传递给模型中的存储过程?
    • @GaneshAher 您好,您的问题似乎与此回复不太相关。我猜$email_to 是一个你必须循环遍历的数组。你没有给我太多的工作。
    • @RobinCastlin 请检查stackoverflow.com/questions/48092525/… 问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 2016-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多