【发布时间】:2016-03-14 01:32:36
【问题描述】:
我正在编写一个 PHP 应用程序,它需要在添加数据时创建新数据库。我想要一种很好且简单的方法来指定创建的数据库的外观(即它们包含哪些表,这些表应该包含哪些索引,...),这目前是 MySql Workbench 中的 EER 图,然后我将其转发到服务器。我不认为 PHP 代码中的许多 CREATE 语句“既好又简单”。由 PHP 应用程序中的某个事件触发,我需要做一些事情来创建一个具有指定名称的新数据库,该名称是模板数据库的副本。
这是这个问题的重复:
MySQL copy/duplicate database
但是这个问题的答案不适合我。
我不想使用 mysqldump,因为我无法承担在服务器上执行 shell 代码的安全风险,因为必须插入创建的数据库的名称,这可能容易受到代码注入的影响。还有this.
我也不想用 SHOW 语句将数据库分开并手动执行 CREATE 语句来拼接一个新数据库,因为这会很快变得很麻烦,而且它可能无法捕获模板数据库的所有方面,因此会引入难以发现的错误.我也不确定在引用表之前创建引用表时,此方法处理外键的效果如何。
理想情况下,我想使用一个简单的 SQL 语句,例如 CREATE DATABASE ? LIKE TemplateDatabase(其中 ? 以某种形式的预准备语句表示数据库名称)。不幸的是,尽管 MySQL 中似乎不存在该功能。
显然 PostgreSQL 可以做这样的事情就好了,但我不想仅仅因为一个特性而迁移。
如何在满足上述约束的同时实现这一点?
【问题讨论】:
-
CREATE DATABASE ?你不能绑定表/列,句号。使用安全列表。 -
@Fred-ii- 请澄清您对“安全列表”的含义
标签: php mysql database postgresql