You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何同时向两个MySQL表插入数据?现有代码插入失败求助

代码问题排查与修复

你的代码存在多个导致数据无法写入数据库的问题,以下是具体问题和修复方案:

1. 条件判断语法错误

验证条件的if语句末尾多了一个分号;,这会让if的逻辑块直接为空,无论验证是否通过,都会执行插入操作和页面跳转:

// 错误写法:末尾分号导致逻辑失效
if(!isset($errordonor_type) || !isset($errorcon_num) || !isset($errorname1) || !isset($errorcategor_type) || !isset($errorlocation)|| !isset($errordate)||!isset($erroramount)|| !isset($errorwithdrawal));

需去掉末尾分号,让大括号内的代码受条件控制。

2. 字段验证逻辑嵌套错误

$name1的验证被嵌套在$con_num的空值判断里,意味着只有当con_num为空时才会检查name1,不符合需求,应将name1的验证单独提取,与其他字段验证平级:

// 错误写法
$con_num = $_POST['con_num'];
if(empty($con_num)){
  $errorcon_num="please input your number";
  $name1 = $_POST['name1'];
  if(empty($name1)){
  $errorname1="please enter your name";}
}

// 正确写法
$con_num = $_POST['con_num'];
if(empty($con_num)){
  $errorcon_num="please input your number";
}
$name1 = $_POST['name1'];
if(empty($name1)){
  $errorname1="please enter your name";
}

3. 缺少数据库操作错误检查

执行mysqli_query后未判断操作是否成功,也未输出数据库错误信息,无法定位插入失败的具体原因,需添加错误检查:

// 示例:检查插入结果并输出错误
$insert = mysqli_query($conn,"INSERT INTO donor(...) VALUES(...)");
if($insert){
  echo "<script>alert('created account');window.location.href='login.php'</script>";
}else{
  echo "插入失败:" . mysqli_error($conn);
}

4. SQL注入风险(同时可能导致插入失败)

直接将POST参数拼入SQL语句,当参数包含特殊字符(如单引号)时会触发SQL语法错误,导致插入失败。必须使用预处理语句规避:

// 预处理语句示例
$stmt = mysqli_prepare($conn, "INSERT INTO donor(donor_type, con_num, name1, categor_type, location, date, amount, withdrawal) VALUES(?, ?, ?, ?, ?, ?, ?, ?)");
mysqli_stmt_bind_param($stmt, "ssssssds", $donor_type, $con_num, $name1, $categor_type, $location, $date, $amount, $withdrawal);
if(mysqli_stmt_execute($stmt)){
  echo "<script>alert('created account');window.location.href='login.php'</script>";
}else{
  echo "插入失败:" . mysqli_stmt_error($stmt);
}
mysqli_stmt_close($stmt);

(注:ssssssds为参数类型绑定,对应8个参数的类型,可根据数据库字段类型调整)

5. 其他冗余与潜在问题

  • $donor_type = $_POST['donor_type'];重复赋值,删除其中一个即可;
  • 检查categor_type的拼写是否与数据库字段一致(比如是否应为category_type),字段名不匹配会导致插入失败;
  • 确保queries.php中的数据库连接$conn有效,无连接错误。

修正后的完整代码示例

<!DOCTYPE html>
<html>
<head>
<?php
  include "queries.php";
  include "header.php";
?>
</head>
<body>
<?php
if(isset($_POST['submit'])){
  $donor_type = $_POST['donor_type'];
  if(empty($donor_type)){
      $errordonor_type = "not existing";
  }

  $con_num = $_POST['con_num'];
  if(empty($con_num)){
    $errorcon_num = "please input your number";
  }

  $name1 = $_POST['name1'];
  if(empty($name1)){
    $errorname1 = "please enter your name";
  }

  $categor_type = $_POST['categor_type'];
  if(empty($categor_type)){
    $categor_type = "not existing";
  }

  $location = $_POST['location'];
  if(empty($location)){
    $errorlocation = "please enter your location";
  }

  $date = $_POST['date'];
  if(empty($date)){
    $errordate = "not exist";
  }

  $amount = $_POST['amount'];
  if(empty($amount)){
    $erroramount = "please specefic amount";
  }

  $withdrawal = $_POST['withdrawal'];
  if(empty($withdrawal)){
    $errorwithdrawal = "please choose";
  }

  // 修正条件判断:改为逻辑与,所有验证通过才执行插入
  if(!isset($errordonor_type) && !isset($errorcon_num) && !isset($errorname1) && !isset($errorlocation) && !isset($errordate) && !isset($erroramount) && !isset($errorwithdrawal)){
    $stmt = mysqli_prepare($conn, "INSERT INTO donor(donor_type, con_num, name1, categor_type, location, date, amount, withdrawal) VALUES(?, ?, ?, ?, ?, ?, ?, ?)");
    mysqli_stmt_bind_param($stmt, "ssssssds", $donor_type, $con_num, $name1, $categor_type, $location, $date, $amount, $withdrawal);
    if(mysqli_stmt_execute($stmt)){
      echo "<script>alert('created account');window.location.href='login.php'</script>";
    }else{
      echo "插入失败:" . mysqli_stmt_error($stmt);
    }
    mysqli_stmt_close($stmt);
  }
}
?>
</body>
</html>

内容的提问来源于stack exchange,提问作者Mohammad Sali Jauhari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 14:47:02