Php 未捕获异常';错误异常';带有消息';错误的SQL:插入到

Php 未捕获异常';错误异常';带有消息';错误的SQL:插入到,php,mysql,Php,Mysql,我在为MySQL插入时没有使用正确的语法 $v0="`" . $this->mysqli->real_escape_string($cooke[0]) . "`"; $v1="`" . $this->mysqli->real_escape_string($cooke[1]) . "`"; $v2="`" . $this->mysqli->real_escape_string($cooke[2]) . "`"; $v3="

我在为MySQL插入时没有使用正确的语法

        $v0="`" . $this->mysqli->real_escape_string($cooke[0]) . "`";
    $v1="`" . $this->mysqli->real_escape_string($cooke[1]) . "`";
    $v2="`" . $this->mysqli->real_escape_string($cooke[2]) . "`";
    $v3="`" . $this->mysqli->real_escape_string($cooke[3]) . "`";
    $v4="`" . $this->mysqli->real_escape_string($cooke[4]) . "`";
    $sql="INSERT INTO index(surname, surChart, immigration, residence) VALUES ($v0,$v1,$v2, $v3)";

    if($this->mysqli->query($sql) === false) {
      trigger_error('Wrong SQL: ' . $sql . ' Error: ' . $this->mysqli->error, E_USER_ERROR);
    } else {
      $last_inserted_id = $this->mysqli->insert_id;
      $affected_rows = $this->mysqli->affected_rows; echo 'af: '. $affected_rows;
    }
错误是:

Fatal error: Uncaught exception 'ErrorException' with message 'Wrong SQL: INSERT INTO index(surname, surChart, immigration, residence) VALUES (`COOK/E`,`COOK/E|CHARDE|FORD| |COOKE|WHITE|DENSLOW|NASH|FOOTE|SMITH||STRONG|FORD||WOOLCOTT|PITKIN|CLARK|COOLEY|GUNN|GRAVES|FIELD|LONGLEY|ELDRIDGE|O.C. AVERY||WESTWOOD|BARNARD|CATLIN||ALLEN||Abner Avery|NIMS|WOOD|WRIGHT|H.L. AVERY||BURDSALL|PUTNEY|COOKE||HAMBLEN?|FOSKETT|CLARK|ELDRIDGE|LONGLEY|O.C. AVERY||LAWRENCE|BATCHELOR|MORSE|TARBOL/|TARBALL|HOUGHTON|LONGLEY|[COOKE^ Contd.]|FIELD|ELDRIDGE|O.C. AVERY`,`Brideport^ Dorset|England;||||Dorchester|Windsor^ CT|Northampton Westfield|New Haven CT Hadley|||Windsor CT|Windsor CT|||Springfield|Sunderland|Sunderland|Hawley|Charlemont|Hawley|Charlemont||Hadley||Hadley|Hadley|Shelburne||Hardwick|Shelburne||Charlemont|Ohio|Ohio|Ohio|Charlemont||Groton^ Salem||Salem|Salem||Charlton|Charlton||Goshen|Hawley|Charlemont|Charlemont||Groton MA||Sudbury|Groton MA|Lexington||Groton MA|Hawley||||Hawley||Charlemont|`, `---||1630 The Mary & John|||Bef 1637 in C:\xampp\htdocs\AveryChart\mySqlCsv.php on line 107
Sql echo:

INSERT INTO ancestorIndex(surname, surChart, immigration, residence) VALUES (`COOK/E`,`COOK/E+CHARDE+FORD+ +COOKE+WHITE+DENSLOW+NASH+FOOTE+SMITH++STRONG+FORD++WOOLCOTT+PITKIN+CLARK+COOLEY+GUNN+GRAVES+FIELD+LONGLEY+ELDRIDGE+O.C. AVERY++WESTWOOD+BARNARD+CATLIN++ALLEN++Abner Avery+NIMS+WOOD+WRIGHT+H.L. AVERY++BURDSALL+PUTNEY+COOKE++HAMBLEN?+FOSKETT+CLARK+ELDRIDGE+LONGLEY+O.C. AVERY++LAWRENCE+BATCHELOR+MORSE+TARBOL/+TARBALL+HOUGHTON+LONGLEY+[COOKE^ Contd.]+FIELD+ELDRIDGE+O.C. AVERY`,`Brideport^ Dorset+England;++++Dorchester+Windsor^ CT+Northampton Westfield+New Haven CT Hadley+++Windsor CT+Windsor CT+++Springfield+Sunderland+Sunderland+Hawley+Charlemont+Hawley+Charlemont++Hadley++Hadley+Hadley+Shelburne++Hardwick+Shelburne++Charlemont+Ohio+Ohio+Ohio+Charlemont++Groton^ Salem++Salem+Salem++Charlton+Charlton++Goshen+Hawley+Charlemont+Charlemont++Groton MA++Sudbury+Groton MA+Lexington++Groton MA+Hawley++++Hawley++Charlemont+`, `---++1630 The Mary & John+++Bef 1637+1638+1678+Aft 1650+1676+1688++++1656+1661++Aft 1687++1680+1709+1736+1783+1805+1847+1895++++1661+1706+1743++1783+By 1813++1815++1858+1885+1913++By 1643+By 1662+By 1678+By 1700+By 1738+By 1766++1791+1812+1847+1895++By 1639+bef 1667+1660+1687+By 1732+By 1720+By 1749+1773++++By 1827+1847+1895`)

有三件事需要你去做

首先,
INDEX
是一个非常糟糕的表名称选择。它是MySQL中的保留字

第二,你的台词是这样的:

 $v1="`" . $this->mysqli->real_escape_string($cooke[1]) . "`";
结果就是这样的值

 `someValue`.
您希望文本值不是用反勾号括起来,而是用撇号(单引号)括起来。用这个

 $v1="'" . $this->mysqli->real_escape_string($cooke[1]) . "'";
更好的方法是使用绑定变量。请阅读以下内容:

第三,插入表中某些列的字符串值确实很长。以下是您尝试插入的值。我认为,对于您在表中声明的列来说,它们中的一些可能太长了

Surname: COOK/E
Surchart: COOK/E+CHARDE+FORD+ +COOKE+WHITE+DENSLOW+NASH+FOOTE+SMITH++STRONG+FORD++WOOLCOTT+PITKIN+CLARK+COOLEY+GUNN+GRAVES+FIELD+LONGLEY+ELDRIDGE+O.C. AVERY++WESTWOOD+BARNARD+CATLIN++ALLEN++Abner Avery+NIMS+WOOD+WRIGHT+H.L. AVERY++BURDSALL+PUTNEY+COOKE++HAMBLEN?+FOSKETT+CLARK+ELDRIDGE+LONGLEY+O.C. AVERY++LAWRENCE+BATCHELOR+MORSE+TARBOL/+TARBALL+HOUGHTON+LONGLEY+[COOKE^ Contd.]+FIELD+ELDRIDGE+O.C. AVERY
Immigration: Brideport^ Dorset+England;++++Dorchester+Windsor^ CT+Northampton Westfield+New Haven CT Hadley+++Windsor CT+Windsor CT+++Springfield+Sunderland+Sunderland+Hawley+Charlemont+Hawley+Charlemont++Hadley++Hadley+Hadley+Shelburne++Hardwick+Shelburne++Charlemont+Ohio+Ohio+Ohio+Charlemont++Groton^ Salem++Salem+Salem++Charlton+Charlton++Goshen+Hawley+Charlemont+Charlemont++Groton MA++Sudbury+Groton MA+Lexington++Groton MA+Hawley++++Hawley++Charlemont+
Residence: ---++1630 The Mary & John+++Bef 1637+1638+1678+Aft 1650+1676+1688++++1656+1661++Aft 1687++1680+1709+1736+1783+1805+1847+1895++++1661+1706+1743++1783+By 1813++1815++1858+1885+1913++By 1643+By 1662+By 1678+By 1700+By 1738+By 1766++1791+1812+1847+1895++By 1639+bef 1667+1660+1687+By 1732+By 1720+By 1749+1773++++By 1827+1847+1895
这起到了作用:

    public function arrayToMySQL2($line_of_text){
    if ($line_of_text[0]){
        $stmt = mysqli_prepare($this->mysqli, "INSERT INTO ancestorIndex VALUES (?, ?, ?, ?, ?)");
        mysqli_stmt_bind_param($stmt, 'sssss', $line_of_text[0], $line_of_text[1], $line_of_text[2], $line_of_text[3], $line_of_text[4]);
        mysqli_stmt_execute($stmt);
        printf("%d Row inserted.<br>", mysqli_stmt_affected_rows($stmt));
        mysqli_stmt_close($stmt);
    }
}
公共函数arrayToMySQL2($line\u of_text){
if($line\u,of\u text[0]){
$stmt=mysqli_prepare($this->mysqli,“插入到ANCESTORDINDEX值(?,,,,,?)”;
mysqli_stmt_bind_param($stmt,$sssss',$line_of_text[0],$line_of_text[1],$line_of_text[2],$line_of_text[3],$line_of_text[4]);
mysqli_stmt_execute($stmt);
printf(“%d行插入。
”,mysqli_stmt_受影响的_行($stmt)); mysqli_stmt_close($stmt); } }
索引
这是一个SQL保留字!所以把它放在'like this'index'中,您有一个名为index的表吗?此外,SQL中的反勾号用于标识符,而不是字符串值。已更改为ANCESTORDINDEX。相同的错误可能重复