【问题标题】:MySql syntax Error - Columns have numbers for nameMySql 语法错误 - 列有名称的数字
【发布时间】:2013-09-05 10:10:47
【问题描述】:

我有下面的mysql语句:

INSERT INTO rates_try (`Weight`, `length`, `height`, `Min`, `100`, `200`, `300`) VALUES (1000,0.1,2.3,1,2,3,4);

这给出了错误:

没有创建行。检查您的 SQL 语法有错误;检查 与您的 MySQL 服务器版本相对应的手册 在第 1 行的“插入查询”附近使用的语法INSERT INTO rates_try (WeightlengthheightMin100200300) (1500,2.31,3.5,1,0,0,0);

表结构为:

rates_try ( `Weight` int(11), 
            `length` double, 
            `height` double, 
            `Min` double, 
            `100` double, 
            `200` double, 
            `300` double )

我不确定语法有什么问题,我知道它很可能与作为数字的列有关,如果这是导致它的问题,我将不得不在名称中添加一些内容,这样它们就不仅仅是数字,但我想先检查一下情况是否如此。

创建语句的 php 代码

$insertquery = "INSERT INTO rates_{$tablename} (`Weight`, `length`, `height`, `Min`";
                foreach ($titles as $title){
                    if (empty($title) ){

                    }else{
                        $insertquery .= ", `" . $title . "`";
                        $counter++;
                    }
                }
                $insertquery .=  ") VALUES (".$row['weight'].",".$row['cbm_min'].",".$row['cbm_max'].",".$value;
                $a = 0;
                while ($a < $counter){
                    $newvalue = $array[$a][$i];
                    if (empty($newvalue)){
                        $newvalue = 0;
                    }
                    $insertquery .= ",". $newvalue;
                    $a++;
                }
                $insertquery .= ");";

                echo $insertquery. "<br/>";
                $queryResult = mysqli_query($con, insertquery);

【问题讨论】:

  • 你的错误在哪里?见sqlfiddle.com/#!2/324b1/2
  • 这个错误似乎不是这个查询引起的。在您的代码中查找 insertquery。也许缺少一些报价?
  • 不要认为这与numbers for column names 有任何关系。错误说insertquery,我在您的声明中没有看到,这让我认为这与给出错误的声明不同?
  • 不要使用数字作为列名。除了技术问题之外,从文档的角度来看,它们也非常糟糕。名为100 的列存储什么?指示其他值等于 100 的布尔标志?独家价值100?完全不同的东西?

标签: php mysql sql


【解决方案1】:

$queryResult = mysqli_query($con, insertquery);

现在可以看到了吗?

insertquery前面少了一个$

【讨论】:

  • 宾果游戏非常感谢!应该从一开始就包含 php,但错误提示我查询
  • 提示:当 MySQL 抱怨一个不在您的查询中的词时(在您的情况下它涉及 insertquery),那么这清楚地表明您的应用程序代码有问题。
【解决方案2】:

这是一个有趣的问题,因为您实际上已经遵循了使用反引号包围列名的规则 - 根据document I just checked,您的列名确实有效:

标识符可以以数字开头,但除非被引用,否则标识符可能不仅仅由数字组成。

注意,虽然 Windows 上的 MySQL 标识符不区分大小写,但您会发现在 Linux 上,它们是。你确定你没有在某处遗漏大写或小写吗?您的第一列使用大写字母开头,但其他列都没有。

然而,我会说使用必须反引号的列名通常是一个坏主意。每次提及时都使用不需要特别注意的东西。

【讨论】:

  • 我同意上一段中给出的建议。
猜你喜欢
  • 2020-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-24
  • 1970-01-01
  • 2020-03-25
  • 1970-01-01
  • 2014-01-08
相关资源
最近更新 更多