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

如何将数据库获取的name变量传入Facebook og:description标签?

解决og:description中PHP变量不生效的问题

咱们一步步拆解问题,先从代码本身的细节入手,再结合Facebook爬虫的特性来解决:

1. 先修复PHP语法错误

你的代码里漏掉了两个关键的闭合大括号——if($result)和if($count==1)的结尾},这会导致PHP解析失败,后续的echo $name根本不会执行。先把语法补全,同时优化代码逻辑:

<?php 
// 先处理passkey为空的情况,避免"未定义索引"报错
$passkey = $_GET['passkey'] ?? ''; 
$tbl_name1 = "temp";
// 给name设置默认值,防止找不到对应记录时变量未定义
$name = "Guest"; 

// 用预处理语句避免SQL注入,这是必须的安全操作!
$sql = "SELECT name FROM $tbl_name1 WHERE confirm_code = ?";
$stmt = mysqli_prepare($conn, $sql);
mysqli_stmt_bind_param($stmt, "s", $passkey);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);

if($result){
    $count = mysqli_num_rows($result);
    if($count == 1){
        $rows = mysqli_fetch_array($result);
        $name = $rows['name'];
    }
}
// 现在所有代码块都正确闭合了
?>
<meta property="og:description" content="My sample description with variable - <?php echo htmlspecialchars($name, ENT_QUOTES); ?>" />

2. 处理变量未定义与特殊字符转义

如果passkey无效或者数据库里找不到对应记录,$name会处于未定义状态,这会触发PHP警告,虽然浏览器可能不显示,但Facebook爬虫可能会忽略有语法错误的标签内容。提前给$name设默认值就能避免这个问题。

另外,用htmlspecialchars()转义输出内容,防止$name里的引号、&等特殊字符破坏meta标签的语法结构。

3. 先验证页面实际输出

别只依赖Facebook调试器,先直接访问你的链接example.com/confirm?passkey=eb35700460247fe469efd524a6a276e4,查看页面源代码,确认og:description里已经正确输出了$name的值。如果源代码里都没有,那问题出在PHP逻辑上,和Facebook无关。

4. 强制Facebook调试器重新抓取

Facebook调试器会缓存页面内容,哪怕你已经修复了代码,它可能还是显示旧结果。进入调试器页面后,点击Scrape Again按钮,让它重新获取最新的页面内容。

额外提醒:SQL注入风险

你原来的代码直接把$_GET['passkey']拼进SQL语句里,存在严重的SQL注入漏洞,上面的代码已经用预处理语句修复了这个问题,一定要坚持用这种写法保护数据库安全。

按照上面的步骤修改后,$name应该就能正确显示在og:description标签里了。

内容的提问来源于stack exchange,提问作者MMPL1

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:05:27