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'
有人有想法吗?
答案 0 :(得分:20)
在purchase_date
语句中的'
和INSERT
之间插入了一个不可打印的字符30(RecordSeparator)。只需删除文本('purchase_date')
并手动重写即可。
答案 1 :(得分:5)
当我收到此错误时,Nery利基解决方案。
我的桌面上有一个BEFORE INSERT
触发器,它与
NEW.`field_mysql_doesnt_think_exists`
做了一些事情,如果我没有将该字段传递给插入语句,那么我会得到
[ERROR in query 3] Unknown column 'field_mysql_doesnt_think_exists' in 'field list'
答案 2 :(得分:3)
我只花了一天的时间来解决这个问题。我的问题是一样的:看不见的字符和查询并返回“未知列”错误。
我通过使用NotePad ++重新登录Windows并删除垃圾来解决它。
垃圾是如何首先进入那里的?我认为这是因为我错误地将一些长复杂的查询复制到LibreOffice Writer(我的功能规范文档)中,而不是仅仅在phpMyAdmin中将它们加入书签或将它们保存在文本编辑器中。将它们从LibreOffice粘贴到查询窗口中是(我认为)垃圾来源的地方。
在那里,它像疟疾一样持续存在。我甚至无法通过手工重新输入整个查询来解决它 - 我必须将它放入NotePad ++(编码菜单)并显示ANSI和UTF8组合,然后手动删除垃圾。
一旦完成,查询就有效了。
答案 3 :(得分:2)
如果在构建表结构时粘贴列名,也会发生这种情况。相同的错误 - 但是不可打印/不可见的字符在表结构中,而不是查询。
答案 4 :(得分: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)";
答案 5 :(得分:0)
这可能对其他人没有帮助,但添加“以防万一”它可以帮助某人。
在我的情况下,这是一个不同的解决方案。
我收到大型数据集作为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文件中的这两行。
答案 6 :(得分:0)
在不同场景中出现相同错误:
当您错过变量的@符号时也会发生这种情况。
SET @myVar1=1; SELECT @myVar1; -- GOOD, correctly prints: 1
SET @myVar1=1; SELECT myVar1; -- BAD, prints: Unknown column 'myVar1' in 'field list'
答案 7 :(得分:0)
查看您要处理的表的名称
答案 8 :(得分: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 Result
如果您想要基于预准备语句的函数,请进行以下测试:(占位符,参数和值,根本不需要[']或[“]!)
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();
}