【问题标题】:Handling database table fields in php - Creating dynamic table using php在 php 中处理数据库表字段 - 使用 php 创建动态表
【发布时间】:2014-08-08 11:45:29
【问题描述】:

我想用这样的字段创建一个动态表。

    table_name: book_list

    book1(int(2))   book2(int(2))....   book44(int(2)

我有一个这样的 php 代码。

    <?php
    $dbhost = 'localhost';
    $dbuser = 'root';
    $dbpass = '';
    $conn = mysql_connect($dbhost, $dbuser, $dbpass);
    for($i=1;$i<=44;$i++){

    $sql = 'CREATE TABLE IF NOT EXISTS `book_list` (
      book_'.$i. 'int(2) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1';

    mysql_select_db('book_db');
    $retval = mysql_query( $sql, $conn );
    }
    ?>

上面的代码需要做一些调整,这是为了生成动态表。

任何帮助都会更有意义。

谢谢, 金兹

PS:我知道 MYSQL 正在贬值,但这仍然适用于我的客户,他只想要 mysql 而不是 pdo 或 mysqli。看起来很疯狂。但是还是

【问题讨论】:

标签: php mysql for-loop while-loop


【解决方案1】:

您可以使用一些 ORM 工具,例如http://redbeanphp.com/

但最好的选择是使用 3NF 的数据库。

将 bookNo 作为列添加到表中,添加列 Number

样本。

CREATE TABLE IF NOT EXISTS `book_list` (
   number int(2) NOT NULL 
   book int(2) NOT NULL
)

参考文献

  1. http://en.wikipedia.org/wiki/Object-relational_mapping
  2. http://en.wikipedia.org/wiki/Third_normal_form

【讨论】:

    【解决方案2】:

    您应该开始在 for 循环之外构建您的查询,然后在您想要的字段上进行循环。像这样的东西(未测试):

    <?php
    $dbhost = 'localhost';
    $dbuser = 'root';
    $dbpass = '';
    $conn = mysql_connect($dbhost, $dbuser, $dbpass);
    
    $sql = 'CREATE TABLE IF NOT EXISTS `book_list` (';
    
    for($i=1;$i<=44;$i++){
        $sql .= 'book_'.$i. ' int(2) NOT NULL';
        if($i < 44) {
            $sql .= ', ';
        }
    }
    
    $sql .= ') ENGINE=InnoDB DEFAULT CHARSET=latin1';
    
    mysql_select_db('book_db');
    $retval = mysql_query( $sql, $conn );
    
    ?>
    

    【讨论】:

    • 哇,哇。哇。优秀。还有一件事是。代码简直太棒了。一个小小的改变。更改 $sql .= 'book_'.$i. ' int(2) NOT NULL' 到 $sql .= 'book_'.$i. 'int(2) NOT NULL';
    猜你喜欢
    • 2014-07-06
    • 2023-03-13
    • 2017-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多