我正在尝试在数据库中创建一个表。如果表已经存在,我希望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已成功添加”,即使该表已存在。
答案 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。