Do While循环无输出及PHP语法错误求助:邮件内容追加失败
我来帮你一步步解决这两个问题,先搞定扎眼的语法错误,再排查Do While循环的输出问题:
你遇到的Parse error: unexpected '$message',大概率是字符串与变量拼接时的语法失误。比如你原本想把$messagebody和$hyperlink追加到$message里,但可能漏了PHP中用来拼接字符串的.运算符,或者引号、分号的位置写错了。
举个例子,错误写法可能是这样的:
// 错误:漏了拼接运算符. $message = $messagebody $hyperlink; // 或者误用了数字相加的+运算符(PHP里+不能拼接字符串) $message = $message + $messagebody + $hyperlink;
正确的写法应该用.来拼接,如果是追加内容到已有变量末尾(而不是覆盖),记得用.=运算符:
// 如果是覆盖原有$message内容 $message = $messagebody . $hyperlink; // 如果是追加到$message的末尾 $message .= $messagebody . $hyperlink;
检查你的Line 58代码,确认拼接时的运算符和标点符号都正确,分号一定要放在语句末尾哦。
Do While循环不输出数据,常见原因有这几个,你可以逐一排查:
(1)循环条件或结果集获取逻辑错误
Do While是先执行一次循环体,再判断条件,如果你的循环条件写反了,或者没正确从结果集取数据,就会出问题。比如很多人会写错循环的顺序:
// 错误写法:先进入循环再取数据,第一次循环可能无内容 do { // 处理$row } while ($row = mysqli_fetch_assoc($result));
正确的做法是先获取第一行数据,再进入循环:
// 正确写法:先取第一行数据,再启动Do While $row = mysqli_fetch_assoc($result); do { // 输出或处理数据,比如: echo "患者姓名:" . $row['patient_name'] . ",所在医院:" . $row['hospital'] . "<br>"; // 如果是追加到邮件内容里 $message .= "患者姓名:{$row['patient_name']},所在医院:{$row['hospital']}\n"; } while ($row = mysqli_fetch_assoc($result));
(2)SQL查询没返回数据
先确认你的查询语句是否真的能拿到数据。可以在循环前加一行代码,检查结果集的行数:
// 假设$conn是你的数据库连接,$result是查询结果 if (mysqli_num_rows($result) == 0) { echo "没有找到匹配的捐赠者数据"; exit; }
如果输出这句话,说明问题出在SQL查询上——比如筛选器官/血液捐赠者的条件写错了,或者数据库里本来就没有符合条件的数据。
(3)数据库查询本身出错
如果SQL语句有语法错误,也会导致结果集为空。可以在执行查询后加错误排查代码:
$result = mysqli_query($conn, $sql); if (!$result) { die("查询出错:" . mysqli_error($conn)); }
这样能直接看到SQL的错误信息,方便你修正查询语句。
(4)循环内的输出逻辑有问题
比如你在循环里的echo语句写错了变量名,或者把内容写到了邮件变量里但没打印检查。可以在循环里临时加一行var_dump($row);,看看$row里有没有数据,确认变量名是否和数据库字段一致。
先把语法错误修复,再一步步测试循环:
- 单独测试SQL查询,确认能拿到预期数据;
- 用
var_dump($row)检查循环内的变量内容; - 逐步调整循环逻辑,确保数据能正常输出或追加到邮件内容里。
内容的提问来源于stack exchange,提问作者Ismail Issa

