Php 如何修复MySQL数据库的SQL语法错误?
我想通过web表单界面将.csv文件数据上传到MySQL表。在搜索脚本之后,我找到了一个脚本来完成这项工作,但它在执行过程中给出了SQL语法错误。在这里,我给出了目前为止的特定代码片段,但如果需要,我会给出完整的代码Php 如何修复MySQL数据库的SQL语法错误?,php,mysql,Php,Mysql,我想通过web表单界面将.csv文件数据上传到MySQL表。在搜索脚本之后,我找到了一个脚本来完成这项工作,但它在执行过程中给出了SQL语法错误。在这里,我给出了目前为止的特定代码片段,但如果需要,我会给出完整的代码 if($this->table_exists) { $sql = "LOAD DATA INFILE '".@mysql_escape_string($this->file_name).
if($this->table_exists)
{
$sql = "LOAD DATA INFILE '".@mysql_escape_string($this->file_name).
"' INTO TABLE '".$this->table_name.
"' FIELDS TERMINATED BY '".@mysql_escape_string($this->field_separate_char).
"' OPTIONALLY ENCLOSED BY '".@mysql_escape_string($this->field_enclose_char).
"' ESCAPED BY '".@mysql_escape_string($this->field_escape_char).
"' ".
($this->use_csv_header ? " IGNORE 1 LINES " : "")
."('".implode("','", $this->arr_csv_columns)."')";
$res = @mysql_query($sql);
$this->error = mysql_error();
}
在执行过程中,它会抛出以下错误:
错误
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''temp_18_04_2015_05_44_00' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\\' ' at line 1
gererated SQL命令如下所示
LOAD DATA INFILE '/tmp/phpFzT3qc'
INTO TABLE 'temp_18_04_2015_06_06_37'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '\\'
ESCAPED BY '\\'
IGNORE 1 LINES ('SLNO','NAME')
我是一名新手程序员,因此无法获得错误…我认为您必须删除表名周围的单引号:
$sql = "LOAD DATA INFILE '".@mysql_escape_string($this->file_name).
"' INTO TABLE ".$this->table_name.
" FIELDS TERMINATED BY '".@mysql_escape_string($this->field_separate_char).
"' OPTIONALLY ENCLOSED BY '".@mysql_escape_string($this->field_enclose_char).
"' ESCAPED BY '".@mysql_escape_string($this->field_escape_char).
"' ".
($this->use_csv_header ? " IGNORE 1 LINES " : "")
."('".implode("','", $this->arr_csv_columns)."')";
如果使用单个qoutes,则它是字符串而不是表名。要转义表名,必须使用反勾号
有关
LOAD DATA infle
语法的更多信息,请参阅不要使用已弃用的mysql\ucode>API。使用mysqli.*
或PDO
。您可以共享SQL命令吗?@Jens。希望我已经共享了SQL命令。还有什么问题吗?我指的是生成的SQL命令,没有php函数。因此,打印出$sql
并共享它。将数据填充“/tmp/phpFzT3qc”加载到表“temp\u 18\u 04\u 2015\u 06\u 06\u 37”字段中,字段以“,”结尾,也可以用“\\”括起来,并由“\\”转义,忽略1行('SLNO','NAME')@jensjensjen,我认为根据sql语法允许使用单引号。我在PHPMyadmin中运行命令时看到了这一点。@samlancer单引号是允许的。这是正确的。但只用于静态字符串,而不用于表或列名。不,Jens。在删除表名周围的单引号后,我尝试过,但没有成功。您能推荐另一个运行在web上的脚本,它可以使用PHP将.csv文件导入MYSQL数据库吗?对不起!它显示错误:您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第1行“SLNO”、“NAME”)附近使用的正确语法。请原谅,我又把它放在这里了@Jens新生成的SQL命令是将数据填充“/tmp/phpsa08CZ”加载到表temp_18_04_2015_06_18_55字段中,字段以“,”结尾,也可以用“\\”括起来,并由“\\”转义,忽略1行('SLNO','NAME')@Jens