【问题标题】:Auto Creating a Table in SQL在 SQL 中自动创建表
【发布时间】:2014-02-05 11:57:36
【问题描述】:

不知道有没有人可以帮忙?

我是 PHP 新手,我已经开始创建一个基于会员的网站作为一个项目来尝试学习一些新的 PHP,我想知道自动创建表的正确语法是什么?

这是我当前的代码,我希望为每个用户创建一个单独的表,但是在尝试和尝试后,我似乎无法让它工作!

有什么建议/更正吗?

<?php
    require("dbconnection.php");

    if(empty($_SESSION['username'])) {
        header("Location: index.php");
        die("Redirecting to index.php");   
    }

    $user = $_SESSION['username'];
    $sql = "CREATE TABLE $user (id int(5) NOT NULL)";
    $result = mysql_query($sql);

    if(!$result) {
        echo "FAILED";
    }
    echo "CREATED";
?>

dbconnection.php 文件工作正常,因为我的所有其他页面都调用它以执行其他任务。

【问题讨论】:

  • 您确定要为每个用户创建一个表吗?这似乎非常不寻常。
  • 添加 echo $sql;和“或死(mysql_error())”在适当的地方。 (顺便说一句,这看起来是个坏主意)。并且不要使用过时的方法。
  • 定义“不能让它工作”——会发生什么?
  • 请不要那样做! 为每个用户创建一个表意味着您的系统存在严重的设计问题。关于标准化的研究。
  • 我建议您解释为什么要这样做,并让这里的人解释它为什么不好,以及如何使它变得更好。

标签: php mysql sql


【解决方案1】:

不要那样做!

为什么不在一个包含所有用户所有数据的表中插入一个新行?

$sql = "INSERT INTO users (username) VALUES ('".$sql."')";

【讨论】:

    【解决方案2】:

    根据我的经验,强烈不建议为每个用户创建每个表,因为它在空间和资源方面非常昂贵。如果 Facebook 做同样的事情,他们的数据库中将有 11 亿个表!取而代之的是,他们为所有这些成员提供了 1 个表格。使用一个表,然后保留一个主键列,例如用于识别此人的 ID。例如

    $sql = "CREATE TABLE IF NOT EXISTS users (
              id INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
              names VARCHAR(100),
              email VARCHAR(100),
              password VARCHAR(200)
            )";
    mysql_query($sql) or die(mysql_error());
    

    然后当用户注册时,id 列会自动增加,因此他/她将拥有一个唯一的 ID,您可以使用它来跟踪他/她,就像这样;

    $res = mysql_query("SELECT * FROM users WHERE id ='".$id."'") or die(mysql_error());
    $data = mysql_fetch_assoc($res);
    echo $data['names']." ".$data['email']; /* names, email, password ... etc */
    

    这好多了。与其创建 100 万张表,不如为所有 100 万人创建一张表。

    问候!

    【讨论】:

    • 谢谢布赖恩,比没有解释的不要这样做更有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-26
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    • 1970-01-01
    相关资源
    最近更新 更多