当数据库中的表已经存在时,请留下不同的消息


Leave a different message when table in the database already exists

我正试图在数据库中创建一个表。如果表已经存在,我希望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 was successfully added",即使表已经存在。

不确定您使用的是什么框架,但您必须发送这样的响应,

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");       
   }
}

您需要验证您的输入。

根据表是否存在,函数返回值为true/false。在某些情况下,即使在处理新表名时出现问题,返回值也可能为"true"。我建议在函数开始时检查表是否存在,如果存在,请在尝试创建/克隆操作之前返回false或throw and exception。

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

编辑:此外,为了更有效地在表之间克隆数据,您应该考虑使用"SELECT INTO"-请参阅此处。