使用PHP预准备语句执行数据库插入时出现SQL语法错误
问题原因
你代码中存在多余的非预准备SQL执行逻辑,是数据插入成功但仍报错的核心原因:
- 前半段预准备语句的执行流程
prepare → bind_param → execute完全正确,所以数据可以正常插入到数据库中。 - 末尾这段完全多余的代码触发了报错:
if (mysqli_query($connection, $sql)) { echo ""; } else { echo "Error: " . $sql . "<br>" . mysqli_error($connection); }
你直接调用mysqli_query()把带占位符?的原生SQL语句发送给了数据库,数据库无法识别未绑定参数的?占位符,就会返回你看到的语法错误提示。除此之外如果$_POST['postContent']为空时,$sql变量未定义,这段代码还会额外抛出变量未定义的警告。
修复方案
直接删除末尾这段多余的mysqli_query()判断代码即可。如果需要判断预准备语句的执行状态,直接在execute执行的位置做判断即可,示例如下:
// 原来的else分支里的代码修改为 mysqli_stmt_bind_param($stmt, "sss", $firstname, $lastname, $post); if (!mysqli_stmt_execute($stmt)) { echo "执行错误:" . mysqli_stmt_error($stmt); }
内容的提问来源于stack exchange,提问作者user17285490
相关产品推荐
相关产品推荐

