头部破坏MYSQL错误1064什么';我的语法有什么问题?

头部破坏MYSQL错误1064什么';我的语法有什么问题?,mysql,sql,syntax,mysql-error-1064,Mysql,Sql,Syntax,Mysql Error 1064,我盯着这个看了一会儿,觉得我没有意识到显而易见的事情 结果显示为1064(mysql参考称这是一个语法错误) 我应该注意,$allVals是一个编码的json对象 我的查询有什么问题 $query .= "'' , " ; 你漏了一句话 $query .= "'' , '" ; 我应该做这项工作 我也会考虑使用准备好的语句来更好地了解语法错误可能在哪里;当您尝试像这样构建查询时,调试它可能会更加困难 $stmt = $con->prepare("INSERT INTO members

我盯着这个看了一会儿,觉得我没有意识到显而易见的事情

结果显示为1064(mysql参考称这是一个语法错误)

我应该注意,$allVals是一个编码的json对象

我的查询有什么问题

$query .= "'' , " ;
你漏了一句话

$query .= "'' , '" ;
我应该做这项工作

<>我也会考虑使用准备好的语句来更好地了解语法错误可能在哪里;当您尝试像这样构建查询时,调试它可能会更加困难

$stmt = $con->prepare("INSERT INTO members ( id , username , password , all , articles ) VALUES ( '', ?, ?, ?, '')");
$stmt->bind_param("sss", $username, $password, $allVals);
$stmt->execute();
/* ... */
你漏了一句话

$query .= "'' , '" ;
我应该做这项工作

<>我也会考虑使用准备好的语句来更好地了解语法错误可能在哪里;当您尝试像这样构建查询时,调试它可能会更加困难

$stmt = $con->prepare("INSERT INTO members ( id , username , password , all , articles ) VALUES ( '', ?, ?, ?, '')");
$stmt->bind_param("sss", $username, $password, $allVals);
$stmt->execute();
/* ... */

似乎在
$username
之后有一个单引号,但不是在以下日期之前:

$query = "INSERT INTO members ( id , username , password , all , articles ) VALUES ( ";
    $query .= "'' , '" ; //missed the quote here
    $query .= $username . "' , '" ;
    $query .= $password . "' , '" ;
    $query .= $allVals . "' , ";
    $query .= "'' );";
    $result = mysqli_query($con, $query);
    if (mysqli_errno($con)){
            echo mysqli_errno($con);
            echo mysqli_connect_error($con);
    }

似乎在
$username
之后有一个单引号,但不是在以下日期之前:

$query = "INSERT INTO members ( id , username , password , all , articles ) VALUES ( ";
    $query .= "'' , '" ; //missed the quote here
    $query .= $username . "' , '" ;
    $query .= $password . "' , '" ;
    $query .= $allVals . "' , ";
    $query .= "'' );";
    $result = mysqli_query($con, $query);
    if (mysqli_errno($con)){
            echo mysqli_errno($con);
            echo mysqli_connect_error($con);
    }

您必须在每个值后面加上公共值

$query = "INSERT INTO members ( id , username , password , all , articles ) VALUES ( ";
$query .= "'' , '" ;
$query .= $username . "','" ;
$query .= $password . "', '" ;
$query .= $allVals . "' ";
$query .= ")";
$result = mysqli_query($con, $query);
if (mysqli_errno($con)){
        echo mysqli_errno($con);
        echo mysqli_connect_error($con);
}

您必须在每个值后面加上公共值

$query = "INSERT INTO members ( id , username , password , all , articles ) VALUES ( ";
$query .= "'' , '" ;
$query .= $username . "','" ;
$query .= $password . "', '" ;
$query .= $allVals . "' ";
$query .= ")";
$result = mysqli_query($con, $query);
if (mysqli_errno($con)){
        echo mysqli_errno($con);
        echo mysqli_connect_error($con);
}

如果未将数据插入
id
articles
列,请不要将其作为查询语句的一部分:

$query = "INSERT INTO members ( username , password , all ) VALUES ( '";
    $query .= $username . "' , '" ;
    $query .= $password . "' , '" ;
    $query .= $allVals . "' );";

    $result = mysqli_query($con, $query);
    if (mysqli_errno($con)){
            echo mysqli_errno($con);
            echo mysqli_connect_error($con);
    }

此外,您需要确保变量已正确转义。

如果您没有将数据插入
id
文章
列,请不要将它们作为查询语句的一部分:

$query = "INSERT INTO members ( username , password , all ) VALUES ( '";
    $query .= $username . "' , '" ;
    $query .= $password . "' , '" ;
    $query .= $allVals . "' );";

    $result = mysqli_query($con, $query);
    if (mysqli_errno($con)){
            echo mysqli_errno($con);
            echo mysqli_connect_error($con);
    }

此外,您需要确保变量被正确转义。

我喜欢这样做:

    $query .= "('' , '".$username . "' , '" .$password . "' , '".$allVals . "' ,'' )";
它还可以插入多行:

$qvals[] = "('' , '".$username[1] . "' , '" .$password[1] . "' , '".$allVals[1] . "' ,'' )";
$qvals[] = "('' , '".$username[2] . "' , '" .$password[2] . "' , '".$allVals[2] . "' ,'' )";
$qvals[] = "('' , '".$username[3] . "' , '" .$password[3] . "' , '".$allVals[3] . "' ,'' )";

$query = "INSERT INTO members ( `id` , `username` , `password` , `all` , `articles` ) VALUES ".implode(',',$qvals);

您可以通过检查what
echo$query来再次检查结果输出。

我喜欢这样做:

    $query .= "('' , '".$username . "' , '" .$password . "' , '".$allVals . "' ,'' )";
它还可以插入多行:

$qvals[] = "('' , '".$username[1] . "' , '" .$password[1] . "' , '".$allVals[1] . "' ,'' )";
$qvals[] = "('' , '".$username[2] . "' , '" .$password[2] . "' , '".$allVals[2] . "' ,'' )";
$qvals[] = "('' , '".$username[3] . "' , '" .$password[3] . "' , '".$allVals[3] . "' ,'' )";

$query = "INSERT INTO members ( `id` , `username` , `password` , `all` , `articles` ) VALUES ".implode(',',$qvals);


您可以通过检查what
echo$query来再次检查结果输出。

你有没有回音?对于传递的任何值,似乎都没有初始引号。但是既然您使用的是mysqli,为什么不使用预先准备好的语句呢?语法错误到底在哪里?请发布整个错误消息。此外,您可能不需要在id列中插入任何内容,假设它是一个自动递增的字段。谢谢大家。那是丢失的撇号。非正式的回答***你重复了吗?对于传递的任何值,似乎都没有初始引号。但是既然您使用的是mysqli,为什么不使用预先准备好的语句呢?语法错误到底在哪里?请发布整个错误消息。此外,您可能不需要在id列中插入任何内容,假设它是一个自动递增的字段。谢谢大家。那是丢失的撇号。非正式回答***你是正确的,这解决了问题谢谢。你是正确的,这解决了问题谢谢。顺便说一句,不是downvoter,而是这个字符“,”被称为逗号,不常见。正确的形式是“在每一个值之后”,而不是“值”。谢谢你的纠正!!!没关系,没问题)顺便说一句,不是downvoter,但是这个字符“,”叫做逗号,不常见。正确的形式是“在每一个值之后”,而不是“值”。谢谢你的纠正!!!没关系,没问题。
id
仍然是不必要的,如Andrewsi的评论所述。@MarcelKorpel我不知道它是否是自动递增的主键。
id
仍然是不必要的,如Andrewsi的评论所述。@MarcelKorpel我不知道它是否是自动递增的主键。