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

SQL报错:where子句存在未知列'General',论坛专题页SQL查询求助

问题分析与解决办法

你遇到的问题很典型——字符串类型的查询值没有用单引号包裹,导致MySQL把General当成了列名,而不是topic_name字段的匹配值。

直接修复当前代码

你需要给mysqli_real_escape_string处理后的字符串加上单引号,这样MySQL才会把它识别为字符串值:

$sql = "SELECT * FROM topics WHERE topic_name= '" . mysqli_real_escape_string($link,$_GET['id']) . "'";
echo $sql;
$result = mysqli_query($link, $sql);
echo mysqli_error($link);

这样生成的SQL会变成SELECT * FROM topics WHERE topic_name= 'General',MySQL就能正确识别General是要匹配的字符串了。

更安全的方案:使用预处理语句

虽然mysqli_real_escape_string能一定程度防止SQL注入,但预处理语句(参数化查询)是更可靠的做法,能彻底避免这类问题,同时代码也更清晰:

// 准备预处理语句
$stmt = mysqli_prepare($link, "SELECT * FROM topics WHERE topic_name = ?");
// 绑定参数(s表示字符串类型)
mysqli_stmt_bind_param($stmt, "s", $_GET['id']);
// 执行查询
mysqli_stmt_execute($stmt);
// 获取结果
$result = mysqli_stmt_get_result($stmt);
// 处理结果
while ($row = mysqli_fetch_assoc($result)) {
    // 输出或处理数据
}

预处理语句会自动处理字符串的引号和转义,不用手动拼接,安全性和可读性都更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:42:40