0

我需要在插入数据库之前进行修剪。我正在使用 codeigniter 。现在,如果我必须在插入之前进行修剪,那么我必须跨项目进行代码更改。所以我想在 codeigniter 执行插入操作之前做修剪。

在 system/database/drivers/mysql/mysql_driver.php 的 _insert 函数中,我引入了一个 forloop 来修剪数组中的数据。代码如下。

function _insert($table, $keys, $values){
  $arr = array();
  foreach($values as $k => $v)
    $arr[$k] = trim($v);
  return "INSERT INTO ".$table." (".implode(', ', $keys).") VALUES (".implode(', ', $arr).")";
}

任何指导表示赞赏。插入后,如果我看到值数据库,它不会被修剪。我可以在日志文件中看到同样的情况。

4

3 回答 3

2

我可以从 codeigniter 支持的 hooks 类中完成这项工作。

首先在 application/config.php 中启用钩子

第二个 application/config/hooks.php 添加了以下代码。

$hook['pre_controller'] = array(
                            'function' => 'MyTrimer',
                            'filename' => 'utilities.php',
                            'filepath' => 'hooks'
                            );

最后在 hooks/utilities.php 中添加以下代码

function MyTrimer(){
  if(count($_POST) > 0 ){
    foreach($_POST as $k => $v){
      if(!is_array($_POST[$k])){ 
        $_POST[$k]=trim($_POST[$k]);
      }   
    }   
  }
}
于 2013-06-15T09:29:28.360 回答
0

在控制器中发布后,您可以在每个发布示例代码之前编写 trime:

$this->load->model('test_model');
$form_data = array(
          'fname'   =>trim($this->input->post('first_name')),
          'lname'   =>trim($this->input->post('last_name')),
          'position'=>trim($this->input->post('position'))
           );
$this->test_model->insert('test_table',$form_data);
于 2013-06-15T09:01:23.520 回答
0

在控制器中发布后,您可以在每个发布示例代码之前编写转义:

$this->db->escape($this->input->post('first_name'));
于 2014-12-12T09:59:06.010 回答