1

我已经盯着这个看了一会儿,觉得我没有察觉到明显的东西。

结果显示为 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 对象。

我的查询有什么问题?

4

5 回答 5

3
$query .= "'' , " ;

你在这里错过了一个单引号。

$query .= "'' , '" ;

应该做的工作。

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

$stmt = $con->prepare("INSERT INTO members ( id , username , password , all , articles ) VALUES ( '', ?, ?, ?, '')");
$stmt->bind_param("sss", $username, $password, $allVals);
$stmt->execute();
/* ... */
于 2013-05-22T18:23:36.990 回答
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);
    }
于 2013-05-22T18:24:12.403 回答
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);
}
于 2013-05-22T18:24:42.930 回答
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);
    }

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

于 2013-05-22T18:29:00.230 回答
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;输出来仔细检查结果。

于 2013-05-22T18:38:29.980 回答