我正试图在数据库中创建一个表。如果表已经存在,我希望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"-请参阅此处。