在mysql中创建表时使用变量作为表名
Posted
技术标签:
【中文标题】在mysql中创建表时使用变量作为表名【英文标题】:Use a variable as table name when creating a table in 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";
【问题讨论】:
【参考方案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 应用程序,他们看到的内容由管理员用户,他可以在访问用户个人资料时添加和删除内容。我需要一种根据正在显示的页面配置文件来显示内容的方法。关于此或资源的任何想法,您可以指出我,感谢您的时间 不要只用一行创建多个表,只需将列firstname
、lastname
、email
和reg_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() 函数,但这仍然没有任何想法?以上是关于在mysql中创建表时使用变量作为表名的主要内容,如果未能解决你的问题,请参考以下文章