当数据库中的表已经存在时,留下不同的消息
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。
【讨论】:
以上是关于当数据库中的表已经存在时,留下不同的消息的主要内容,如果未能解决你的问题,请参考以下文章
我创建了一个数据库和一个用于保存数据的表。但是当我从应用程序退出并再次运行时,我的数据已经存储,然后根本不存在?
java.sql.SQLSyntaxErrorException:ORA-00942:netbeans 8.0.1 中的表或视图不存在错误消息