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

Posted

技术标签:

【中文标题】当数据库中的表已经存在时,留下不同的消息【英文标题】:Leave a different message when table in the database already exists 【发布时间】:2015-06-09 01:01:17 【问题描述】:

我正在尝试在数据库中创建一个表。如果表已经存在,我想让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;
        
    

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

【问题讨论】:

【参考方案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");       
   

【讨论】:

我使用 Codeigniter 3 作为框架。我刚刚尝试了您的代码,但 r.success 返回未定义。我没有办法检查它。【参考方案2】:

您需要验证您的输入。

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

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

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

【讨论】:

以上是关于当数据库中的表已经存在时,留下不同的消息的主要内容,如果未能解决你的问题,请参考以下文章

如果记录已经存在于jsp页面的表中,如何获取错误消息

我创建了一个数据库和一个用于保存数据的表。但是当我从应用程序退出并再次运行时,我的数据已经存储,然后根本不存在?

我可以在视图中查询数据库中的表(仅当它存在时)?

java.sql.SQLSyntaxErrorException:ORA-00942:netbeans 8.0.1 中的表或视图不存在错误消息

仅当表存在时如何删除 Amazon Redshift 中的表

当.dropna()为它们留下不同的大小时,处理两个数据集的正确方法是什么?