Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何修复MySQL数据库的SQL语法错误?_Php_Mysql - Fatal编程技术网

Php 如何修复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).

我想通过web表单界面将.csv文件数据上传到MySQL表。在搜索脚本之后,我找到了一个脚本来完成这项工作,但它在执行过程中给出了SQL语法错误。在这里,我给出了目前为止的特定代码片段,但如果需要,我会给出完整的代码

            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