当数据库中的表已存在时,请保留其他消息

时间:2015-04-03 22:40:34

标签: php ajax codeigniter

我正在尝试在数据库中创建一个表。如果表已经存在,我希望Ajax留言说这个表已经存在。

这是我到目前为止所做的:

JS

<script>
    // Add table
    $(document).ready(function() {  
        $("#sender_table").find(".add-icon").click(function() {
            var tableName = $(this).attr("data-tablename");
            $.ajax({                  
              type: 'post', 
              url: "<?= base_url(); ?>table/moveTable/",
              data: "table_name=" + $(this).attr("data-tablename"), 
              success: function(r) {
                 $.notify(tableName + " was successfully added.", "success");
              }
            });
        });
    });
</script>

PHP

    public function moveTable() {
        $this->load->model('Connection_model'); 
        $sTablename = $this->input->post('table_name', true);       
        $db1 = $this->session->userdata('receiver_db');
        $db2 = $this->session->userdata('sender_db');

        // Clone table
        $this->Connection_model->get_custom_db('receiver')->query("CREATE TABLE $db1.$sTablename LIKE $db2.$sTablename");

        // Copy data
        $query = $this->Connection_model->get_custom_db('sender')->get($sTablename);
        foreach ($query->result() as $row) {
            $this->Connection_model->get_custom_db('receiver')->insert($sTablename, $row);
        }   
// Check if table exists
        if ($this->Connection_model->get_custom_db('receiver')->table_exists($sTablename)) {
            return true;
        }
        else {
            return false;
        }
    }

当前消息始终是“tablename已成功添加”,即使该表已存在。

2 个答案:

答案 0 :(得分:1)

不确定您使用的是哪种框架,但您必须发送此类响应,

echo json_encode(array('success'=> true));

然后在Javascript中你可以像这样检查

success: function(r) {
   if(r.success){
     $.notify(tableName + " was successfully added.", "success");
   }
   else{
     $.notify(tableName + " was not added.", "fail");       
   }
}

答案 1 :(得分:0)

您需要验证输入。

您的函数返回值是true / false,具体取决于表是否存在。在某些情况下,即使处理新表名时出现问题,返回值也可能为“true”。我建议检查表是否存在于函数的开头,如果存在,则在尝试创建/克隆操作之前返回false或throw和exception。

如果您仍然遇到问题,请考虑添加调试断点并添加apache / mysql日志,以获取可能导致问题的线索。

编辑:另外,为了更有效地在表之间克隆数据,你应该考虑使用'SELECT INTO' - see here