PHP执行INSERT语句向MySQL插入数据提示error 3报错如何解决
报错原因
- 核心SQL语法错误:你编写的INSERT语句中VALUES对应的括号没有闭合,所有字段值写完后缺少右括号
),直接导致SQL解析失败。 - 错误信息获取方式错误:你当前输出的
$connect->connect_error仅返回数据库连接阶段的错误,查询执行产生的错误需要通过$connect->error获取,因此你看不到真实的语法报错提示。 - 字段匹配问题:可对照你的表结构检查插入的字段名、字段值是否和表定义的字段名、类型/长度完全匹配,必填字段是否传入了空值。
- 潜在语法风险:直接将用户输入的变量拼接进SQL语句,不仅存在严重的SQL注入风险,如果变量中包含单引号等特殊字符也会导致SQL语法报错。
修复方案
- 优先补全SQL语句的右括号,同时修正错误获取逻辑,临时修复参考代码:
//INSERT COMPANY TO DATABASE $sql = "INSERT INTO `$company_table` (`company_name`, `company_nip`, `company_regon`, `owner_name`, `owner_surname`, `company_post`, `company_city`, `company_street`) VALUES ('$company_name_user', '$company_nip_user', '$company_regon_user', '$owner_name_user', '$owner_surname_user', '$company_post_user', '$company_city_user', '$company_street_user')"; if($result = $connect->query($sql)) { // 执行成功逻辑 } else { echo "error 3<br> $user_nick"; echo $connect->error; // 替换为查询错误属性获取真实报错 }
- 推荐使用预处理语句彻底解决SQL注入和特殊字符报错问题,参考实现:
$stmt = $connect->prepare("INSERT INTO `$company_table` (`company_name`, `company_nip`, `company_regon`, `owner_name`, `owner_surname`, `company_post`, `company_city`, `company_street`) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"); // 按字段类型绑定参数,示例中全为字符串类型所以用8个s $stmt->bind_param("ssssssss", $company_name_user, $company_nip_user, $company_regon_user, $owner_name_user, $owner_surname_user, $company_post_user, $company_city_user, $company_street_user); if ($stmt->execute()) { // 执行成功逻辑 } else { echo "error 3<br> $user_nick"; echo $stmt->error; } $stmt->close();
内容的提问来源于stack exchange,提问作者Kamil Barwiński
相关产品推荐
相关产品推荐

