【问题标题】:Leave a different message when table in the database already exists当数据库中的表已经存在时,留下不同的消息
【发布时间】:2023-03-12 11:48:01
【问题描述】:

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

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

【问题讨论】:

    标签: php ajax codeigniter


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-08
      • 1970-01-01
      • 2017-02-10
      • 2012-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多