您的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?
相关文章