PHP新闻详情页调用数据库数据设置og meta标签页面空白问题求助
问题排查及修复方案
第一套代码的错误点
- 变量名拼写错误:定义的变量是
$caatid,SQL语句中使用的是$catid,变量不匹配导致查询条件为空,无法命中数据 - 未执行SQL查询:仅定义了SQL语句字符串
$fetch_sql,没有调用mysql_query()执行查询,传入mysql_fetch_array()的$fetch_result是未定义变量,直接触发致命错误 - 字段名拼写错误:SQL查询的字段是
titulonews,取值时用的是titulinews,键名不匹配导致取到空值 - 使用已废弃的
mysql_*扩展:PHP7及以上版本已完全移除该扩展,运行直接抛出致命错误导致页面空白
第二套代码的错误点
- 数组键名错误:
$row['$titulonews']这种写法中,单引号包裹的$不会被解析为变量,实际是查询键名为$titulonews的字段,和表中的实际字段名不符,无法取到值 - 未做查询结果判断:如果SQL查询无结果、执行失败,后续meta标签不会输出,错误未捕获时会直接导致页面空白
- 条件冗余风险:如果测试的新闻未设置
Is_Active=1,会直接查询不到数据
修复后可用代码
<?php // 调试阶段开启错误提示,上线后可关闭 error_reporting(E_ALL); ini_set('display_errors', 1); $catid = intval($_GET['cid']); // 保持和你body部分一致的数据库连接变量$con if ($con) { // 预处理语句避免SQL注入 $stmt = mysqli_prepare($con, "SELECT titulonews, completonews, postimage FROM noticiaspt WHERE id_news = ? AND Is_Active = 1 LIMIT 1"); mysqli_stmt_bind_param($stmt, "i", $catid); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); if ($row = mysqli_fetch_assoc($result)) { $ogTitle = htmlspecialchars($row['titulonews']); // 描述截取前200字纯文本,避免og标签内容过长 $ogDesc = htmlspecialchars(mb_substr(strip_tags($row['completonews']), 0, 200, 'utf-8')); $ogImage = htmlspecialchars('http://linktomysite.pt/admbo/postimages/' . $row['postimage']); ?> <meta property="og:title" content="<?php echo $ogTitle; ?>" /> <meta property="og:image" content="<?php echo $ogImage; ?>" /> <meta property="og:description" content="<?php echo $ogDesc; ?>" /> <?php } mysqli_stmt_close($stmt); } ?>
额外注意事项
- meta标签必须放在页面
<head>区块内才能被正确识别 - 如果你使用了CDN或页面缓存,更新代码后需要清除缓存才能生效
- 不要直接在og:description中输出完整带HTML标签的新闻内容,避免解析异常
内容的提问来源于stack exchange,提问作者Bruno Santos
相关产品推荐
相关产品推荐

