【问题标题】:SQL database table creation with variable使用变量创建 SQL 数据库表
【发布时间】:2016-01-01 12:47:12
【问题描述】:

我正在做一个项目,我必须使用 sql。变量$file_name 需要是表名,但是当我尝试这个时:

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

表没有创建。我用这个检查过:

if ($sqlConnection->query($sqlTableCreate) === TRUE) {  
    echo 'Created Sucessfully';
} else {
    echo 'Table does not create.';
}

我在尝试使用它时收到'Table does not create'。帮助将不胜感激。提前致谢!

【问题讨论】:

  • 您能说明$sqlConnection 是如何创建的吗?你用的是PDO还是mysqli
  • 您需要从 MySQL 获取 actual 错误。目前尚不清楚您使用的是哪个 API,因此您必须查看该 API 的文档以确定如何返回真正的错误消息。
  • MySQL 没有实际错误。它只是不创造。我正在使用 MySQLi
  • 如果将print $sqlConnection->error; 添加到else 子句,输出是什么?
  • 你能检查一下,表是否已经创建了吗? (如果创建一次,后续查询将失败并出现错误。)

标签: php mysql


【解决方案1】:

您的文件名包含扩展名,但我怀疑您只是想使用不带扩展名的名称作为表名。您可以使用basename 函数删除扩展名。

$sqlTableCreate = "CREATE TABLE ". basename($file_name, ".csv") . "( 
    id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
    firstname VARCHAR(30) NOT NULL,
    lastname VARCHAR(30) NOT NULL,
    email VARCHAR(50),
    reg_date TIMESTAMP
)";

如果可以有不同的扩展,并且您想更广泛地删除它们,请参阅

How to remove extension from string (only real extension!)

【讨论】:

  • 需要确定是否还有其他文件类型?
  • 我添加了一个指向另一个问题的链接,该问题显示了如何删除扩展。
  • 没有。仅允许将 .csv 扩展名上传到该站点。谢谢!
【解决方案2】:

我认为您发布的查询没有任何问题,但有几处可能有问题

确保不存在同名的表。您可以使用IF NOT EXISTS 标记以确保喜欢

  CREATE TABLE IF NOT EXISTS". $file_name . "(
  1. 确保变量$file_name 不为空。否则,您将在 CREATE TABLE 语句中传递一个空标识符;这不会成功。

根据您的评论:您有$file_name = 'currentScan.csv';

这就是问题所在。您正在尝试创建一个名为 currentScan.csv 的表,您的数据库引擎认为 currentscan 是数据库名称,.csv 是显然不会退出的表名,因此出现错误。

【讨论】:

    【解决方案3】:

    首先检查您的数据库连接并使用以下内容更改您的查询:

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

    【讨论】:

    • OP的查询没问题,我看这里没有变化?
    • 我的数据库连接正常,但我无法创建表。
    • 空间重要吗?