【问题标题】:dynamic table name in mysql database?mysql数据库中的动态表名?
【发布时间】:2014-05-12 16:32:55
【问题描述】:

我正在使用以下代码在 mysql 数据库中创建动态表,效果很好。

但是,我还想根据动态表名创建第二个表!

例如:

dynamic table name 是:David second table based on David table 应该是:David.booksDavid-books

这是我当前的代码:

$stmt = mysqli_prepare( $db_conx, "CREATE TABLE  $user (
  id int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (id)
)"
);

我试过了,但没有创建表:

$stmt = mysqli_prepare( $db_conx, "CREATE TABLE  $user.'books' (
  id int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (id)
)"
);

我也这样尝试过,但没有创建任何表格:

$stmt = mysqli_prepare( $db_conx, "CREATE TABLE  $user.books (
  id int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (id)
)"
);

有人可以帮帮我吗?

谢谢

【问题讨论】:

  • David.booksDavid-books 都不是一个好的标识符名称,因为 you've got to quote them。为什么不改为David_books
  • 把你的表名放在`之间
  • 有任何错误或消息吗?
  • 像这样动态创建的表名通常是设计不佳的标志。为什么不使用 SINGLE 书籍表,然后在 ownername 字段中放置“David”。
  • “来自太多连接”表?所以你创建 MORE 表?

标签: php mysql


【解决方案1】:

你不应该在你的表名周围加上单引号:

$stmt = mysqli_prepare( $db_conx, "CREATE TABLE " .$user. "_books (
  id int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (id)
)"
);

另外,don't use a dot in a table name.

另外,根据@Fred-ii-、don't use a dash in your table names

【讨论】:

  • 好奇:为什么-books 中有连字符? SQL 中不应使用连字符,因为它可能被误解为减号,除非反引号。
  • @Fred-ii- 啊,这是提问者对点的替代,我什至没有想到这一点。固定。
  • 看来 OP 有很多答案可供选择,哈哈
  • 我使用了_books,它工作得很好,所以接受这个答案。
  • 它得到了回报,嗯? @DigitalChris ;-) +1
【解决方案2】:

在 mySQL 表名中不能有点,带有不带引号的标识符。

Database and table names cannot contain '/', '\', '.', or characters
that are not permitted in file names.

参考:http://dev.mysql.com/doc/refman/5.0/en/identifiers.html

此外,您对表格的使用似乎不合常规,您应该使用 RELATIONAL 数据库提供的可能性。

如:Database schema for Books, Authors, Publishers and Users with bookshelves

【讨论】:

【解决方案3】:

$stmt = mysqli_prepare($db_conx, "CREATE TABLE ".$user."-books ( id int(11) NOT NULL AUTO_INCREMENT, 主键(id) )" );

【讨论】:

    【解决方案4】:

    将字符串放在一起的正确方法是使用 .像你一样,但你没有在字符串本身中定义你想要的点:

    $string = $user . ".books"; // This will return "David.books"
    $string = $user . "-books"; // And this will return "David-books"
    

    你看到我是如何添加一个额外的点了吗?

    也许你甚至可以做类似$string = $user.".books"; 然后做的事情

    $stmt = mysqli_prepare($db_conx, "CREATE TABLE $string");
    

    因为我不认为 MySQL 允许您像以前那样将字符串放在一起

    【讨论】:

      【解决方案5】:

      你不能按原样写 $user。你必须这样做: "CREATE TABLE '".$user.".books' ( id in(11) .... 希望对您有所帮助

      【讨论】:

        猜你喜欢
        • 2010-10-30
        • 1970-01-01
        • 2021-01-15
        • 2020-04-17
        • 1970-01-01
        • 1970-01-01
        • 2014-01-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多