26
DROP TABLE IF EXISTS `transactions`;
CREATE TABLE `transactions` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `purchase_date` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `transactions` (`purchase_date`) VALUES (NULL)

我已经在这段代码中隔离了我的问题。当我运行它时,我收到错误:

[查询 3 中的错误] '字段列表' 中的未知列 'purchase_date'

任何人的想法?

4

10 回答 10

27

在语句purchase_date的 和之间插入了一个不可打印的字符 30(RecordSeparator) 。只需删除文本并手动重写它应该没问题。'INSERT('purchase_date')

于 2013-04-13T15:48:40.637 回答
11

当我收到此错误时,Nery 利基解决方案。

我的桌子上有一个BEFORE INSERT触发器,它做了一些事情, NEW.`field_mysql_doesnt_think_exists` 如果我没有将该字段传递给插入语句,那么我会得到

[ERROR in query 3] Unknown column 'field_mysql_doesnt_think_exists' in 'field list'

于 2017-04-26T11:06:10.553 回答
5

我只是花了一天的大部分时间来解决这个问题。我的问题是一样的:不可见的字符 kiboshing 查询并返回“未知列”错误。

我通过涉水回到 Windows 并使用 NotePad++ 删除垃圾来解决它。

垃圾最初是如何进入那里的?我认为这是因为我错误地将一些长而复杂的查询复制到 LibreOffice Writer(我的功能规范文档)中,而不是仅仅在 phpMyAdmin 中添加书签或将它们保存在文本编辑器中。将它们从 LibreOffice 粘贴到查询窗口是(我认为)垃圾的来源。

一旦到了那里,它就会像疟疾一样持续存在。我什至无法通过手动重新输入整个查询来摆脱它——我必须将它放入 NotePad++(编码菜单)并显示 ANSI 和 UTF8 组合,然后手动删除垃圾。

完成后,查询就起作用了。

于 2015-07-10T20:01:49.730 回答
2

如果在构建表结构时粘贴列名,也会发生这种情况。同样的错误 - 但不可打印/不可见的字符在表结构中,而不是查询中。

于 2015-09-30T14:04:05.673 回答
1

这可能对其他人没有帮助,但添加这个“以防万一”它可以帮助某人。

我以 Excel CSV 文件的形式接收大型数据集,并使用 (WIL) 脚本将 .csv 文件转换为可导入的 .sql 文件。

我的转换脚本中有一个错误,这两行没有引用相同的表名(我硬编码了第一个位置并忘记更新它):

* "INSERT INTO `old_table_name` (`cid`, `date`, etc etc"
* "CREATE TABLE IF NOT EXISTS `":_dbName:"` (etc etc "

我刚刚更改了第一行以从变量中获取表名,瞧!

* "INSERT INTO `":_dbName:"` (`cid`, `date`, etc etc"

因此,请检查导入 SQL 文件中的这两行。

于 2017-09-17T19:20:53.660 回答
1

我今天早上遇到了同样的问题,但我没有找到答案。但是当我将查询周围的单引号更改为双引号时,我发现了我的问题。这么小的事情和疏忽可能会引起真正的头痛。

“字段列表”中的未知列 x - 下面的代码用单引号括起来 - 无效。

    $likepost='INSERT INTO reaction(reaction_num,userreaction_id,timereacted,
    streamitem_id,comment_posted_on) 
    VALUES ($reaction,$target,NOW(),$streamid,$comment_id)';

下面的代码用双引号括起来。在职的

    $likepost="INSERT INTO reaction(reaction_num,userreaction_id,timereacted,
    streamitem_id,comment_posted_on) 
    VALUES ($reaction,$target,NOW(),$streamid,$comment_id)";
于 2020-08-03T05:29:42.707 回答
0

不同情况下的相同错误:

当您错过变量的 @ 符号时,也会发生这种情况。

SET @myVar1=1;  SELECT @myVar1;  -- GOOD, correctly prints:  1
SET @myVar1=1;  SELECT  myVar1;  -- BAD, prints:  Unknown column 'myVar1' in 'field list' 
于 2018-03-12T15:23:51.440 回答
0

当您想使用以下函数使用 mysql 时:

function insert($table, $info_array){
    // implode keys as columns by [`,`] glue string
    $columns = implode("`,`", array_keys($info_array));

    // implode values as sql ready values by [','] glue string
    $values = implode("','", array_values($info_array));

    // make query(careful about [`] for columns name and ['] for values)
    $sql = "INSERT INTO ".$table." (`".$columns."`) VALUES ('".$values."');";
    return $sql;
}

您应该注意表列名称的 [`]值的 ['] 或 ["]。例如,我以这种方式使用上述函数:

try{
        $db_insert_sample_user = $connection->query(insert(TABLE_PREFIX."users", [
            "username" => "my_name_2",
            "password" => md5("how457fty")
        ]));
        echo '<pre>';
        print_r($db_insert_sample_user);
        echo '</pre>';
    }catch (PDOException $exc){
        echo '<pre>';
        print_r($exc);
        echo '</pre>';
    }

查询字符串是这样的:

INSERT INTO php_pdo_users (`username`,`password`) VALUES ('my_name_2','ee04708d313adf4ff8ba321acf3eb568');

结果就像:(对于两个用户) PHPMyAdmin 结果

如果您想要基于准备好的语句的函数,请对此进行测试:(占位符、参数和值,根本不需要 ['] 或 ["]!!!

function insert_prepared(PDO $connection, $table, $info_array){
    // columns
    $columns = implode("`,`", array_keys($info_array));

    // placeholders
    $place_holders = [];
    for ( $i = 0; count(array_keys($info_array)) > $i; $i++){
        $place_holders[] = '?';
    }

    // convert placeholders to query string
    $place_holders_str = implode(",", $place_holders);
    $prepared_stmt = "INSERT INTO ".$table." (`".$columns."`) VALUES (".$place_holders_str.");";

    // prepare statement
    $stmt = $connection->prepare($prepared_stmt);

    // values
    $values = array_values($info_array);

    // bind all params to values
    for($i = 0; count($values) > $i; $i++){
        $stmt->bindParam($i + 1, $values[$i]);
    }

    // execute and return results
    return $stmt->execute();
}

以这种方式执行代码后:

try {
        $db_insert_sample_user = insert_prepared(
            $connection,
            TABLE_PREFIX . "users",
            [
                "username" => "my_name_4",
                "password" => md5( "HelloDolly#__3" )
            ]
        );
    } catch ( PDOException $exc ) {
        echo "Failed : " . $exc->getMessage();
    }

结果是: 具有insert_prepared功能的结果

于 2020-11-14T17:58:03.127 回答
0

我使用的是 mysql 过程,并且在过程参数中我使用phone 了额外的空间而不是phone没有额外的空间,因为当我调用该函数时。它只是抛出错误没有这样的列phone 。直到我奇迹般地发现它并使用 phpMyAdmin 纠正它,错误才消失。

于 2021-12-19T13:09:31.147 回答
-3

查看您正在处理的表的名称

于 2020-06-29T12:11:31.670 回答