"'필드 목록'에 알 수 없는 열"이 있지만 열이 존재합니다.
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의 오류] '필드 리스트'의 알 수 없는 열 '구매_날짜'
생각나는 사람?
인쇄할 수 없는 문자 30(Record Separator)이 삽입되어 있습니다.purchase_date그리고.'에서INSERT진술.텍스트만 제거합니다.('purchase_date')손으로 다시 쓰면 괜찮을 겁니다
이 오류가 발생했을 때 틈새 솔루션이 없었습니다.
저는.BEFORE INSERT내 테이블에 있는 트리거를 통해 무엇인가를 한. NEW.`field_mysql_doesnt_think_exists` 만약 내가 그 필드를 삽입문에 전달하지 않았다면, 나는
[ERROR in query 3] Unknown column 'field_mysql_doesnt_think_exists' in 'field list'
하루의 대부분을 이걸 알아내는데 보냈어요제 문제는 똑같았습니다. 보이지 않는 문자가 쿼리를 키보싱하고 "알 수 없는 열" 오류를 반환하는 것입니다.
다시 윈도우로 들어가서 노트패드++로 쓰레기를 제거하면서 해결했습니다.
애초에 쓰레기가 어떻게 들어갔을까요?phpMyAdmin에 북마크하거나 텍스트 편집기에 저장하는 대신 길고 복잡한 쿼리를 LibreOffice Writer(나의 기능 사양 문서)에 복사하는 실수를 범했기 때문인 것 같습니다.LibreOffice에서 쿼리 창에 붙여넣는 것이 쓰레기가 발생한 곳이라고 생각합니다.
한때는 말라리아처럼 지속되었습니다.노트패드++(인코딩 메뉴)에 넣고 ANSI와 UTF8 콤보를 보여준 뒤 손으로 쓰레기를 치워야 하는 전체 쿼리를 손으로 다시 입력해서는 그것을 없앨 수도 없었습니다.
그 작업이 완료되면 쿼리가 작동했습니다.
테이블 구조를 작성할 때 열 이름을 붙여넣을 경우에도 이 문제가 발생할 수 있습니다.동일한 오류 - 그러나 인쇄할 수 없는/보이지 않는 문자가 쿼리가 아닌 테이블 구조에 있습니다.
오늘 아침에도 같은 문제가 있었는데 답을 찾지 못했습니다.하지만 제 쿼리 주변의 작은 따옴표를 큰 따옴표로 바꾸면서 제 문제를 발견했습니다.아주 작은 것과 감시는 정말 두통을 유발할 수 있습니다.
"필드 목록"에서 알 수 없는 열 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)";
이것은 다른 사람에게 도움이 되지 않을 수도 있지만, "만일의 경우"를 위해 이것을 추가하는 것은 다른 사람에게 도움이 됩니다.
Excel CSV 파일로 대용량 데이터셋을 받고 WIL(스크립트)을 사용하여 .csv 파일을 가져올 수 있는 .sql 파일로 변환합니다.
변환 스크립트에서 오류가 발생하여 두 줄이 동일한 테이블 이름을 참조하지 않았습니다(첫 번째 위치를 하드 코드화하고 업데이트하는 것을 잊었습니다).
* "INSERT INTO `old_table_name` (`cid`, `date`, etc etc"
* "CREATE TABLE IF NOT EXISTS `":_dbName:"` (etc etc "
변수에서 테이블 이름도 가져오려고 첫번째 줄을 바꿨는데 voila!
* "INSERT INTO `":_dbName:"` (`cid`, `date`, etc etc"
따라서 Import SQL 파일에서 두 줄을 확인합니다.
다른 시나리오에서 동일한 오류:
변수에 대한 @ 기호를 놓쳤을 때도 발생합니다.
SET @myVar1=1; SELECT @myVar1; -- GOOD, correctly prints: 1
SET @myVar1=1; SELECT myVar1; -- BAD, prints: Unknown column 'myVar1' in 'field list'
다음과 같은 함수를 사용하여 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();
}
결과는 : 함수를 사용한 결과
parameter에서 mysql을 했습니다.phone 대신에 여분의 공간을 두고phone추가 공간이 없는 상태에서 함수를 호출할 때마다 이 문제가 발생합니다.은이는만다다sht과orw은t는이hs.phone 하였습니다.. 기적적으로 발견하여 phpMyAdmin으로 수정하기 전까지 에러가 발생하였습니다.
이 답변을 찾았을 때 파이썬 프로그램에서 동일한 PYMYSQL 오류가 발생했습니다.
새로운 데이터 프레임을 만들 때 팬더 규칙을 어겼을 겁니다
이로 인해 위와 같은 오류가 발생했습니다.유령기둥
inddata = dat[['ind_id','iso3c','date','data']]
dat.to_sql(name='inddata', con=engine, if_exists='append', index=False, chunksize=200)
이를 통해 오류가 수정되었습니다.
dat2 = dat[['ind_id','iso3c','date','data']]
inddata = dat2.copy()
dat.to_sql(name='inddata', con=engine, if_exists='append', index=False, chunksize=200)
열 이름에 인쇄할 수 없는 문자로 인해 발생하는 경우가 있습니다. 이와 같은 쿼리를 사용하여 어떤 열이 잘못되었는지 확인했습니다.저는 리눅스에서 파이썬 스크립트를 사용하여 csv 데이터를 정기적으로 가져옵니다.csv는 window xl 스프레드시트를 변환하여 만들었습니다.파일의 맨 처음에 뭔가가 있었는데, dos2unix로 전처리한 것은 거기 있던 것을 제거한 것 같습니다.
mysql> select id from yourtablename;
ERROR 1054 (42S22): Unknown column 'id' in 'field list'
mysql> SELECT CONVERT(COLUMN_NAME USING ASCII) as name
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='databasename' AND `TABLE_NAME`='yourtablename';
+----------------------------------+
| name |
+----------------------------------+
| ?id |
| first |
| last |
| name |
| costcenter |
+----------------------------------+
당신이 다루는 테이블의 이름을 보세요.
언급URL : https://stackoverflow.com/questions/15989529/unknown-column-in-field-list-but-column-does-exist
'programing' 카테고리의 다른 글
| MYSQL 열 만들기에서 NULL vs DEFAULT NULL vs NULL DEFAULT NULL? (0) | 2023.09.16 |
|---|---|
| 빈도순으로 상위 구별 결과 선택 (0) | 2023.09.16 |
| 특정 phpunit xml 테스트 스위트를 실행하는 방법은? (0) | 2023.09.16 |
| 장고: 양식을 사용하여 하나의 템플릿에 여러 개의 모델을 사용합니다. (0) | 2023.09.16 |
| c, boole에서 true == 1이고 false == 0입니까? (0) | 2023.09.16 |