【问题标题】:Use a variable as table name when creating a table in mysql在mysql中创建表时使用变量作为表名
【发布时间】:2017-02-05 00:08:15
【问题描述】:

我有变量 whos 的值是 0 到 1000 之间的随机数,我想在创建新表时使用它作为名称。我试图通过将我的 sql 与存储随机数的变量连接起来来做到这一点,这没有奏效,有没有办法做到这一点?谢谢

include 'includes/db_connect_ssg.php';

if (isset($_POST['new_user_name'])&&isset($_POST['new_user_password'])) {
    $username = $_POST['new_user_name'];
    $password  = $_POST['new_user_password'];
    $randID = rand(0,1000);
    $sql = "INSERT INTO `Users`(`id`, `username`, `password`, `admin`, `href`) VALUES ('$randID','$username','$password','0','ssgprofile.php?id=$randID')";

    $query = mysqli_query($dbc, $sql);

    $id = (string)$randID;



        $q = "CREATE TABLE CONCAT('userTable_',$id) (
        id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
        firstname VARCHAR(30) NOT NULL,
        lastname VARCHAR(30) NOT NULL,
        email VARCHAR(50),
        reg_date TIMESTAMP
        )";




    $qquery = mysqli_query($dbc, $q);



    if ($query&&$qquery) {
        include 'admin_loadUsers.php';
    }else{
        echo "Could not connect sorry please try again later, for more info please contact BB Smithy at 0838100085";
    }
}

【问题讨论】:

    标签: php mysql sql mysqli


    【解决方案1】:

    你可以使用:

    $q = "CREATE TABLE `userTable_".$id."` (
            id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
            firstname VARCHAR(30) NOT NULL,
            lastname VARCHAR(30) NOT NULL,
            email VARCHAR(50),
            reg_date TIMESTAMP
            )";
    

    但请注意,创建名称中包含数字的表几乎总是数据库设计不良的标志。

    不要只用一行创建许多表,只需将列 firstname、lastname、email 和 reg_date 添加到表 Users 中。此外,您通过调用 rand(0,1000) 生成用户 ID 的方式将导致冲突(rand 将返回一个已在用户表中用作 ID 的值)。使用 AUTO_INCREMENT 生成用户 ID。

    【讨论】:

    • 您好,感谢您的帮助,我是数据库设计的新手,非常感谢您的意见,我正在构建一个拥有少量用户的 Web 应用程序,他们看到的内容由管理员用户,他可以在访问用户个人资料时添加和删除内容。我需要一种根据正在显示的页面配置文件来显示内容的方法。关于此或资源的任何想法,您可以指出我,感谢您的时间
    • 不要只用一行创建多个表,只需将列firstnamelastnameemailreg_date 添加到表Users。此外,您通过调用rand(0,1000) 生成用户ID 的方式将导致colisions(rand 将返回一个已在Users 表中用作ID 的值)。为什么不用AUTO_INCREMENT 来生成用户ID?
    • 用户数据存储在由用户名密码等组成的用户表中,但是我需要一个表来存储每个用户不同的大量链接,因为它们是由管理员用户。上面示例中的列是我用于测试目的的列。
    • 那么我建议创建表CREATE TABLE Links (id int unsigned not null primary key auto_increment, userId int not null, link varchar(500))。列userId 用于将Links 表中的一行链接到Users 表中的用户。 link 列包含链接本身(如果我理解正确,链接是指 URL)。
    【解决方案2】:

    您没有有效的表名

    来自 Mysql 文档:

    Identifiers may begin with a digit but unless quoted may not consist solely of digits
    

    【讨论】:

    • 您好,感谢您的输入,我使用了一些类型转换将 $randID 转换为字符串值并在查询中使用了 CONCAT() 函数,但这仍然没有任何想法?
    猜你喜欢
    • 1970-01-01
    • 2011-11-21
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    相关资源
    最近更新 更多