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

PHP无法获取SQL查询结果求助:变量替换失效已定位空格问题

问题分析与解决方案

问题根源

你碰到的这个问题核心原因很明确:$hash变量里带有多余的空白字符(比如空格)。当你直接把hash="3"写进SQL语句时,查询条件是精准匹配的hash = '3',但用变量时实际执行的是hash = ' 3'(假设变量带前导空格),数据库里存储的hash值没有空格,自然匹配不到结果,也就拿不到你预期的数字2了。

快速修复方案

解决这个问题最简单的办法就是用PHP的trim()函数去除变量首尾的空白字符(包括空格、换行符、制表符等),修改后的代码如下:

<?php 
ini_set('display_errors', 1); 
ini_set('display_startup_errors', 1); 
error_reporting(E_ALL); 
require("db.php"); 

// 移除变量首尾的空白字符
$hash = trim($_GET["hash"]); 

$sql23 = "SELECT * FROM `game` WHERE `hash` = '$hash'"; 
if ($result=mysqli_query($link,$sql23)) { 
    // 遍历查询结果
    while ($row = mysqli_fetch_row($result)) { 
        printf ("%s (%s)\n", $row[0], $row[1]); 
    } 
    // 释放结果集
    mysqli_free_result($result); 
} 
?>

关键安全提示

另外必须提醒你:当前代码存在严重的SQL注入风险——直接把用户输入的$_GET["hash"]拼接到SQL语句里,恶意用户可以构造特殊输入篡改你的SQL逻辑,甚至窃取或破坏数据库数据。

推荐改用**预处理语句(Prepared Statements)**来彻底解决这个问题,同时也能避免类似变量格式导致的查询异常,示例代码如下:

<?php 
ini_set('display_errors', 1); 
ini_set('display_startup_errors', 1); 
error_reporting(E_ALL); 
require("db.php"); 

$hash = trim($_GET["hash"]); 

// 初始化预处理语句
$stmt = mysqli_prepare($link, "SELECT * FROM `game` WHERE `hash` = ?");
// 绑定参数("s"表示参数为字符串类型)
mysqli_stmt_bind_param($stmt, "s", $hash); 
// 执行语句
mysqli_stmt_execute($stmt);
// 获取结果集
$result = mysqli_stmt_get_result($stmt);

// 遍历输出结果
while ($row = mysqli_fetch_row($result)) { 
    printf ("%s (%s)\n", $row[0], $row[1]); 
} 

// 清理资源
mysqli_stmt_close($stmt);
mysqli_free_result($result);
?>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:29:43