处理php中的数据库表字段 - 使用php创建动态表

时间:2014-06-18 08:53:14

标签: php mysql for-loop while-loop

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

    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 );
    }
    ?>

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

任何帮助都会更加明显。

谢谢, Kimz

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

2 个答案:

答案 0 :(得分:1)

您应该开始在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 );

?>

答案 1 :(得分:0)

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

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

而是将bookNo作为列添加到表中,添加列号

样品。

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