沃梦达 / 编程问答 / php问题 / 正文

您的SQL语法错误中有错误吗?

You have an error in your SQL syntax error?(您的SQL语法错误中有错误吗?)

本文介绍了您的SQL语法错误中有错误吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个函数,其中有一个相当简单的SQL,它在语法中给出了不可能有错误的语法。

function createPetition($conn, $pName, $pTarget, $pDescription, $userId) {
    $sql = "INSERT INTO petitions (petitionName, petitionTarget, petitionDescription, usersId) VALUES (?, ?, ?, ?);";
    //$sql2 = "INSERT INTO petitions (`petitionDate`) VALUES (NOW());";
    $stmt = mysqli_stmt_init($conn);
    if (!mysqli_stmt_prepare($stmt, $sql)) {
        header("location: ./index.php?error=stmtfailed");
        exit();
    }

    /*if (!mysqli_stmt_prepare($stmt, $sql2)) {
    header("location: ./index.php?error=stmtdatefailed");
    exit();
    }*/
    
    mysqli_stmt_bind_param($stmt, "ssss", $pName, $pTarget, $pDescription, $userId);

    if (!mysqli_query($conn, $sql)) {
        echo "Error description: " . mysqli_error($conn);
    } else {
        mysqli_stmt_execute($stmt);
        mysqli_stmt_close($stmt);
        header("location: ./petitionfinal.php?error=none");
        exit();
    }
}

其结果为

错误描述:您的SQL语法中有一个错误;请查看与您的MariaDB服务器版本对应的手册,以了解要使用的正确语法。第1行

当没有明显的错误时。

推荐答案

问题是您的代码中有一个流氓mysqli_query()。您需要将其删除。

您可能错过了它,因为您有太多的代码。你应该把它的大部分去掉。你真的不需要所有这些。

以下是代码应该是什么样子:

function createPetition(mysqli $conn, $pName, $pTarget, $pDescription, $userId) {
    $sql = "INSERT INTO petitions (petitionName, petitionTarget, petitionDescription, usersId) VALUES (?, ?, ?, ?);";
    
    $stmt = $conn->prepare($sql);
    $stmt->bind_param("ssss", $pName, $pTarget, $pDescription, $userId);
    $stmt->execute();

    header("location: ./petitionfinal.php?error=none");
    exit();
}

但是,在函数内部设置重定向不是一个好主意。我强烈建议将其从函数中删除。

function createPetition(mysqli $conn, $pName, $pTarget, $pDescription, $userId) {
    $sql = "INSERT INTO petitions (petitionName, petitionTarget, petitionDescription, usersId) VALUES (?, ?, ?, ?);";
    
    $stmt = $conn->prepare($sql);
    $stmt->bind_param("ssss", $pName, $pTarget, $pDescription, $userId);
    $stmt->execute();
}

// when you call
createPetition($conn, $pName, $pTarget, $pDescription, $userId);

header("location: ./petitionfinal.php?error=none");
exit();

看看它有多好。现在发现错误要容易得多。

如果您想知道有关错误的信息,我必须向您推荐How to get the actual mysql error and fix it?

这篇关于您的SQL语法错误中有错误吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:您的SQL语法错误中有错误吗?

基础教程推荐