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

PHP代码无法插入符合条件手机号至customer表求助

解决PHP代码显示成功但customer表无记录的问题

嘿,我明白你现在的困扰——代码明明输出了"Successful added",但数据库里就是没数据,作为初学者碰到这种情况确实头大,咱们来一步步找出问题并修复它:

原代码的核心问题分析

先拆解你写的逻辑里几个关键错误:

  1. 手机号存在性检查完全偏离需求
    你写的这段SQL:
$sql2 = mysqli_query($con, "SELECT phone_number FROM record WHERE EXISTS (SELECT phone_number FROM customer)");

它的作用是「查询record表中所有在customer表中存在过的手机号」,然后用mysqli_num_rows($sql2) == 1来判断,这和你要检查当前处理的手机号是否在customer表完全没关系!不管当前手机号存不存在,只要customer表里有任何数据,这个判断就会成立;反之如果customer表是空的,不管什么手机号都会走插入逻辑,但插入可能因为其他隐性问题失败了。

  1. 下单次数的判断条件不符合需求
    你的需求是「下单次数超过5次」,但代码里写的是if ($quantity == 5 ),如果你的测试数据里没有刚好下单5次的手机号,这一步就根本不会触发后续逻辑。

  2. 缺少SQL执行错误检查
    你执行插入操作后,没有验证这个操作是否真的成功,就算插入失败(比如手机号字段是唯一索引但重复插入、字段类型不匹配),你还是会输出"Successful added",看不到真实的错误原因。

  3. 存在SQL注入风险
    直接把$phone_number拼接到SQL语句里,虽然是作业,但这是不安全的写法,建议用预处理语句规范代码。

修正后的代码

下面是修复后的完整代码,我加上了详细注释:

<?php
// 连接数据库,增加连接错误检查
$con = mysqli_connect('localhost','root','','bus');
if (!$con) {
    die("数据库连接失败: " . mysqli_connect_error());
}

// 统计各手机号的下单次数,用>=5匹配「超过或等于5次」需求,严格超过就改成>5
$sql = mysqli_query($con, "SELECT phone_number, count(phone_number) as quantity FROM report GROUP BY phone_number HAVING quantity >= 5 ORDER BY quantity");

// 循环处理每个符合条件的手机号
while ($qq = mysqli_fetch_array($sql)) {
    $quantity = $qq['quantity'];
    $phone_number = $qq['phone_number'];

    // 正确检查当前手机号是否已存在于customer表(用预处理语句更安全)
    $check_sql = mysqli_prepare($con, "SELECT phone_number FROM customer WHERE phone_number = ?");
    mysqli_stmt_bind_param($check_sql, "s", $phone_number);
    mysqli_stmt_execute($check_sql);
    mysqli_stmt_store_result($check_sql);
    $exists = mysqli_stmt_num_rows($check_sql) > 0;
    mysqli_stmt_close($check_sql);

    if ($exists) {
        // 如果已存在,跳转页面后终止脚本,避免后续代码执行
        echo "<script>window.location = 'show-customer.php';</script>";
        exit;
    } else {
        // 用预处理语句插入,防止SQL注入,同时检查插入是否成功
        $insert_sql = mysqli_prepare($con, "INSERT INTO customer (`phone_number`) VALUES (?)");
        mysqli_stmt_bind_param($insert_sql, "s", $phone_number);
        if (mysqli_stmt_execute($insert_sql)) {
            echo "成功添加手机号: $phone_number<br>";
        } else {
            echo "添加失败,错误信息: " . mysqli_error($con) . "<br>";
        }
        mysqli_stmt_close($insert_sql);
    }
}

// 关闭数据库连接
mysqli_close($con);
?>

额外调试建议

如果还是有问题,可以用这些方法排查:

  • 在处理逻辑里打印$phone_number和$quantity,确认你处理的是正确的手机号和次数
  • 用mysqli_error($con)获取数据库的具体错误信息,比如字段类型不匹配、唯一键冲突等
  • 直接在数据库客户端执行统计SQL,确认有没有符合条件的手机号

内容的提问来源于stack exchange,提问作者Yuliana Rahmah Solin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:11:38