PHP代码无法插入符合条件手机号至customer表求助
解决PHP代码显示成功但customer表无记录的问题
嘿,我明白你现在的困扰——代码明明输出了"Successful added",但数据库里就是没数据,作为初学者碰到这种情况确实头大,咱们来一步步找出问题并修复它:
原代码的核心问题分析
先拆解你写的逻辑里几个关键错误:
- 手机号存在性检查完全偏离需求
你写的这段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表是空的,不管什么手机号都会走插入逻辑,但插入可能因为其他隐性问题失败了。
下单次数的判断条件不符合需求
你的需求是「下单次数超过5次」,但代码里写的是if ($quantity == 5 ),如果你的测试数据里没有刚好下单5次的手机号,这一步就根本不会触发后续逻辑。缺少SQL执行错误检查
你执行插入操作后,没有验证这个操作是否真的成功,就算插入失败(比如手机号字段是唯一索引但重复插入、字段类型不匹配),你还是会输出"Successful added",看不到真实的错误原因。存在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
相关产品推荐
相关产品推荐

