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

时间:2013-05-22 18:21:34

标签: mysql sql syntax mysql-error-1064

我一直盯着这一眼,并认为我没有察觉到这一点。

结果显示为1064(mysql引用表示这是语法错误)

$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);
    }

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

我的查询有什么问题?

5 个答案:

答案 0 :(得分:3)

$query .= "'' , " ;

你错过了这里的单引号。

$query .= "'' , '" ;

应该做的工作。

我还考虑使用预准备语句来更好地了解语法错误的位置;当你尝试像这样构建你的查询时,调试它可能会更加困难。

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

答案 1 :(得分:1)

看起来在$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);
    }

答案 2 :(得分:0)

你必须在每个值之后放置共同点。

$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);
}

答案 3 :(得分:0)

如果您没有将数据插入idarticles列,请不要将它们作为查询语句的一部分包含在内:

$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);
    }

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

答案 4 :(得分:0)

我喜欢这样做:

    $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);

您可以通过检查echo $query;输出结果来仔细检查结果。