Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysql数据库中的动态表名?_Php_Mysql - Fatal编程技术网

Php mysql数据库中的动态表名?

Php mysql数据库中的动态表名?,php,mysql,Php,Mysql,我使用下面的代码在mysql数据库中创建动态表,这些代码运行良好 但是,我还想基于动态表名创建第二个表 例如: 动态表名是:David 基于David表的第二个表应为:David.books或David books 这是我当前的代码: $stmt = mysqli_prepare( $db_conx, "CREATE TABLE $user ( id int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (id) )" ); $stmt = mys

我使用下面的代码在mysql数据库中创建动态表,这些代码运行良好

但是,我还想基于动态表名创建第二个表

例如:

动态表名是:
David
基于David表的第二个表应为:
David.books
David books

这是我当前的代码:

$stmt = mysqli_prepare( $db_conx, "CREATE TABLE  $user (
  id int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (id)
)"
);
$stmt = mysqli_prepare( $db_conx, "CREATE TABLE  $user.'books' (
  id int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (id)
)"
);
$stmt = mysqli_prepare( $db_conx, "CREATE TABLE  $user.books (
  id int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (id)
)"
);
我尝试了这个,但没有创建表:

$stmt = mysqli_prepare( $db_conx, "CREATE TABLE  $user (
  id int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (id)
)"
);
$stmt = mysqli_prepare( $db_conx, "CREATE TABLE  $user.'books' (
  id int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (id)
)"
);
$stmt = mysqli_prepare( $db_conx, "CREATE TABLE  $user.books (
  id int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (id)
)"
);
我也这样尝试过,但没有创建任何表:

$stmt = mysqli_prepare( $db_conx, "CREATE TABLE  $user (
  id int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (id)
)"
);
$stmt = mysqli_prepare( $db_conx, "CREATE TABLE  $user.'books' (
  id int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (id)
)"
);
$stmt = mysqli_prepare( $db_conx, "CREATE TABLE  $user.books (
  id int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (id)
)"
);
有人能帮我吗


谢谢

您不应该在表名周围单独引用:

$stmt = mysqli_prepare( $db_conx, "CREATE TABLE " .$user. "_books (
  id int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (id)
)"
);


此外,根据@Fred ii-,。

您不应该在表名周围单引号:

$stmt = mysqli_prepare( $db_conx, "CREATE TABLE " .$user. "_books (
  id int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (id)
)"
);

另外,根据@Fred ii-,.

$stmt=mysqli\u prepare($db\u conx,“创建表”.$user.-books( id int(11)非空自动增量, 主键(id) )" );

$stmt=mysqli\u prepare($db\u conx,“创建表”。$user.-books( id int(11)非空自动增量, 主键(id) )"
);

mySQL表名中不能有点,标识符不带引号

Database and table names cannot contain '/', '\', '.', or characters
that are not permitted in file names.
参考:

此外,您对表的使用似乎是非正统的,您应该使用关系数据库提供的可能性


例如:

mySQL表名中不能有点,标识符不带引号

Database and table names cannot contain '/', '\', '.', or characters
that are not permitted in file names.
参考:

此外,您对表的使用似乎是非正统的,您应该使用关系数据库提供的可能性


例如:

将字符串组合在一起的正确方法是使用。与您一样,但您没有在字符串本身中定义所需的点:

$string = $user . ".books"; // This will return "David.books"
$string = $user . "-books"; // And this will return "David-books"
你知道我是怎么加上一个点的吗

也许你甚至可以做一些类似于
$string=$user.“.books”的事情然后执行

$stmt = mysqli_prepare($db_conx, "CREATE TABLE $string");

因为我认为MySQL不允许像您那样将字符串组合在一起

正确的组合字符串的方法是使用。与您一样,但您没有在字符串本身中定义所需的点:

$string = $user . ".books"; // This will return "David.books"
$string = $user . "-books"; // And this will return "David-books"
你知道我是怎么加上一个点的吗

也许你甚至可以做一些类似于
$string=$user.“.books”的事情然后执行

$stmt = mysqli_prepare($db_conx, "CREATE TABLE $string");


因为我认为MySQL不允许您像以前那样将字符串组合在一起

您不能按原样编写$user。您必须这样做:“创建表”.$user..books”(id在(11)中)…希望它有帮助

您不能按原样编写$user。您必须这样做:“创建表”.$user..books”(id在(11)中)…希望它对您有所帮助。

无论是
David.books
还是
David books
都是一个很好的标识符名称,因为。为什么不
David\u books
呢?将表名放在“任何错误或消息”之间?像这样动态创建的表名通常是设计不好的标志。为什么不创建一个books表,然后创建一个
ownername
将“David”“来自太多联接”放在其中的字段表?那么你创建了更多的表吗?无论是
David.books
还是
David books
都不是一个好的标识符名称,因为。为什么不改为
David\u books
呢?将表名放在“任何错误或消息”之间?像这样动态创建的表名通常是设计不好的标志。为什么不是一个books表,然后是一个
 ownername
字段,您将“David”“来自太多联接”表?那么你创建了更多的表?你现在可以,但我不建议使用点。你现在可以,但我不建议使用点。好奇:为什么在
-books
中使用连字符?连字符不应该在SQL中使用,因为它可能被误解为负号,除非勾选。@Fred ii-ah,这是提问者的替代选项。@Fred ii-ah哦,一个点,我甚至没有想到。修正了。似乎OP有很多答案可以从lolI使用的
\u书籍中选择,而且效果很好,所以接受了这个答案。它得到了回报,嗯?@DigitalChris;-)+1Curious:为什么在
-books
中使用连字符?在SQL中不应该使用连字符,因为它可能会被误解为负号,除非打勾。@Fred ii-啊,这是提问者对点的替代,我甚至没有想到。修复了。似乎OP有很多答案可供选择,可以从lolI使用的
\U书籍中选择,并且很好,所以接受了这个答案。它得到了回报,嗯?@DigitalChris;-)+1