php - 您的 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();
看看它有多好。现在发现错误要容易得多。
如果您想知道错误怎么办,那么我必须指出您如何获取实际的 mysql 错误并修复它?
推荐阅读
- if-statement - google sheet - 使用 ARRAYFORMULA 对以上所有行求和
- python - 无法在 macOS“Big Sur”上通过 pip 或 conda 安装镶木地板
- python - 循环遍历多个 CSV 文件并与特定列合并 [Pandas]
- python-3.x - python3 multiprocess.pool.terminate() 不会杀死进程
- javascript - 我的 JavaScript 应该设置/更改属性,但不
- python - os.fwalk() 的 dir_fd 参数有什么作用?
- android - Android:未显示 Google Filament GLTF/GLB 模型
- c# - 将两个数字打包成一个 Int32
- spring-boot - 意外的 RabbitMQ 队列特征丢失 (spring-amqp)
- spring - 多个 @OneToMany 会降低性能