Mysql “字段列表”中的未知列“添加日期”
我正在尝试加载数据填充并得到上述错误Mysql “字段列表”中的未知列“添加日期”,mysql,load-data-infile,Mysql,Load Data Infile,我正在尝试加载数据填充并得到上述错误 LOAD DATA INFILE '$file' REPLACE INTO TABLE $custom_parts FIELDS TERMINATED BY ',' ESCAPED BY '\\\\' LINES TERMINATED BY '\\r\\n' IGNORE 1 LINES (`partsno`, `mfg`, `cond`, `price`, `is_deleted`, @date_added) SET `date_added` =
LOAD DATA INFILE '$file'
REPLACE INTO TABLE $custom_parts
FIELDS TERMINATED BY ',' ESCAPED BY '\\\\'
LINES TERMINATED BY '\\r\\n'
IGNORE 1 LINES
(`partsno`, `mfg`, `cond`, `price`, `is_deleted`, @date_added)
SET `date_added` = STR_TO_DATE(@date_added, '%c/%e/%Y'),
`prtky` = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(partsno, ' ', '' )
, '\\\\', '' ) , '/', '' ) , '_', '' ) , '.', '' ) , '-', '' )
文件的列是这样的
Part Number,MFR,Condition,price,is_deleted,date_added
每当我运行PHP来加载它时,都会出现错误。我被问到为什么会发生这种事。我认为这是一个没有分配用户变量的问题,我只是在寻找验证。您不能将变量用于动态表名。 您只能使用准备好的语句来执行此操作 然而 不能在存储过程中使用load data infile,我也不确定是否可以在准备好的语句中使用它 如果您使用来自更高级别程序php、pascal的MySQL,请尽可能 在构造查询之前解析变量; 对照白名单检查columnname以防止SQL注入 将扩展语句馈送给MySQL。 有关示例代码,请参见此问题:
另外,如果您使用的是动态表名,请使用“backticks”对其进行转义。如果表名包含有趣的字符或是保留字,这可以防止MySQL爆炸 我回答了我自己的问题。-在大多数允许使用表达式的上下文中都可以使用用户变量。这当前不包括显式要求文本值的上下文,例如SELECT语句的LIMIT子句或LOAD DATA语句的IGNORE N LINES子句中的上下文 表不是动态的。这是PHP文件中准备好的语句。如果我从用户变量中声明该列,则该语句可以正常工作,但我需要str_to_date部分的变量,并且可能需要每个mysql,我回答了我自己的问题。-用户变量可以在允许表达式的大多数上下文中使用。这当前不包括显式要求文本值的上下文,例如SELECT语句的LIMIT子句或LOAD DATA语句的IGNORE N LINES子句中的上下文。@Johan动态表名不能使用变量。你只能用事先准备好的陈述来做这件事,-我不确定我是否同意这一点。使用准备好的语句,不能将占位符用作表名,也不能将值绑定到占位符。可以使用变量表示动态表名。你是这个意思吗?