执行UPDATE与SELECT后邮件无法获取查询变量的问题求助
问题解决:邮件正文中无法显示数据库查询的变量
你的代码核心问题是执行SELECT预处理语句后,没有获取查询结果并赋值给$row变量,导致$row未定义,$name自然为空,无法在邮件中显示。同时还有一个潜在问题:$token变量未从$_GET中取值,会导致数据库查询失败。
以下是修正后的完整代码:
if (!isset($_GET['token'])) { echo "Link is missing"; } else { // 先获取URL中的token值 $token = $_GET['token']; $stmt = $conn->prepare("UPDATE account SET verified = ? WHERE token = ?"); $status = 1; // 注意:$status是整数,bind_param的类型应该用"is"而非"ss",避免类型转换问题 $stmt->bind_param("is", $status, $token); $res = $stmt->execute(); if ($res) { echo "name updated"; } $stmt->close(); // 关闭预处理语句,释放资源 $stmt1 = $conn->prepare("SELECT * FROM account WHERE token = ?"); $stmt1->bind_param("s", $token); $res1 = $stmt1->execute(); if ($res1) { // 获取查询结果集 $result = $stmt1->get_result(); // 取出一行数据到$row数组 $row = $result->fetch_assoc(); // 现在可以正确获取name字段 $name = $row["name"]; $fromemail = "post@postmaster.com"; $fromname = "Postmaster Inc."; $subject = "Updating your account"; $to = "member@postmaster.com"; $headers = "MIME-Version: 1.0" . "\r\n"; $headers .= "Content-type:text/html;charset=UTF-8" . "\r\n"; $headers .= "From: ".$fromname." <".$fromemail.">\r\n"; $message = $name; // 现在可以正常显示 mail($to, $subject, $message, $headers); // 释放结果集和关闭预处理语句 $result->close(); $stmt1->close(); } }
关键修正点:
- 获取$token值:添加
$token = $_GET['token'];,确保数据库操作能拿到正确的token参数。 - 修正bind_param类型:$status是整数类型,bind_param的类型标识符用
"is"(i代表整数,s代表字符串),避免不必要的类型转换。 - 获取查询结果:执行
$stmt1->execute()后,必须调用get_result()获取结果集,再用fetch_assoc()将查询结果赋值给$row,这样才能从$row中取出name字段的值。 - 释放资源:添加
close()方法关闭预处理语句和结果集,避免资源泄漏。
内容的提问来源于stack exchange,提问作者Michaël Thönnissen
相关产品推荐
相关产品推荐

