【问题标题】:Error with MySQL "CREATE TABLE" queryMySQL“CREATE TABLE”查询出错
【发布时间】:2013-04-13 19:46:10
【问题描述】:

我知道这已经被问过数百次了,但是我在互联网上四处寻找,找不到我的语法可能有什么问题:

mysql_select_db('Projects');

        $sql = "CREATE TABLE $data[ID] (
            ID INT NOT NULL,
            Creator INT NOT NULL,
            Name VARCHAR(20) NOT NULL,
            Version VARCHAR(20) NOT NULL,
            Status VARCHAR(20) NOT NULL,
            Date VARCHAR(20) NOT NULL,
            Skript VARCHAR(20) NOT NULL,
            Filename VARCHAR(20) NOT NULL,
            Downloads INT NOT NULL,
            PRIMARY KEY(ID)
            )";

        if (mysql_query($sql)){

            echo "Created";

        }else{

            echo "Not created, ".mysql_error();

        }

我尝试使用反引号、引号等,但没有成功。报错中显示的表名(21)是正确的。

这是我得到的错误,包括回显“未创建,”;:

未创建,您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '23 ( ID INT NOT NULL, Creator INT NOT NULL, Name VARCHAR(20) NOT NUL' 附近使用正确的语法

【问题讨论】:

  • $data[ID] 的值是多少?
  • 在运行查询前回显 $sql 会得到什么结果?
  • $data[ID] 的值为 21,用反引号括起来就行了! @bestprogrammerintheworld

标签: php mysql sql create-table


【解决方案1】:

命名对象的规则,包括MySql中的表:

http://dev.mysql.com/doc/refman/5.1/en/identifiers.html

标识符可以以数字开头,但 除非引用可能不仅仅包含 位数。

您不能以数字开头命名您的表格

这将起作用,例如

   $sql = "CREATE TABLE 't'.$data[ID] (
        ID INT NOT NULL,
        Creator INT NOT NULL,
        Name VARCHAR(20) NOT NULL,
        Version VARCHAR(20) NOT NULL,
        Status VARCHAR(20) NOT NULL,
        Date VARCHAR(20) NOT NULL,
        Skript VARCHAR(20) NOT NULL,
        Filename VARCHAR(20) NOT NULL,
        Downloads INT NOT NULL,
        PRIMARY KEY(ID)
        )";

如您所见,它以t开头

或在它周围使用反引号。像这样

   `$data[ID]`

【讨论】:

  • 可以用反引号引用
【解决方案2】:

您的查询似乎正确,但 $data[ID] 的值除外。你应该检查一下。

我认为问题在于 $data[ID] 的值,它的值是什么?此外,使用 mysqli_query() 或 PDO(如 bestprogrammerintheworld 所示)而不是旧的 mysql_query()。

【讨论】:

  • 我尽量保持简单的答案立即发送。我现在编辑了。
【解决方案3】:

您已经设法忽略了最重要的信息,即触发 SQL 错误的 SQL 代码。但我们可以从生成它的 PHP 中收集一些提示:

$sql = "CREATE TABLE $data[ID] (
            ID INT NOT NULL,

...和错误信息:

'23 附近(ID INT NOT NULL

我怀疑你尝试运行这个 SQL:

CREATE TABLE 23 (
    ID INT NOT NULL

如果你真的想创建一个名为 23 的表,你需要在每次使用它时用反引号引用它,包括创建:

CREATE TABLE `23` (
    ID INT NOT NULL

【讨论】:

    猜你喜欢
    • 2019-07-23
    • 2015-05-06
    • 2020-06-30
    • 1970-01-01
    • 2021-05-09
    • 1970-01-01
    • 2022-12-02
    • 2013-03-04
    • 1970-01-01
    相关资源
    最近更新 更多