我需要在插入数据库之前进行修剪。我正在使用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).")";
}
感谢任何指导。插入后,如果我看到值数据库,它不会被修剪。同样我可以在日志文件中看到。
答案 0 :(得分:2)
我可以通过codeigniter支持的钩子类完成此操作。
首先在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]);
}
}
}
}
答案 1 :(得分: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);
答案 2 :(得分:0)
在控制器中发布后,您可以在每个帖子之前写出转义符 示例代码:
$this->db->escape($this->input->post('first_name'));