POST变量导致XML生成执行中断,无POST时可正常生成
我来帮你梳理下这个问题的可能原因和解决办法~从你的描述来看,不用POST变量时XML能正常生成,说明核心逻辑没问题,问题大概率出在POST变量的处理或者SQL查询环节。
问题排查与修复步骤
1. 先去掉错误屏蔽,查看真实报错
你用@mysqli_fetch_assoc屏蔽了MySQL的错误信息,这会让你看不到查询失败的具体原因。先把@删掉,同时开启错误提示,这样能直接定位问题:
// 开发环境开启错误提示(生产环境记得关闭) error_reporting(E_ALL); ini_set('display_errors', 1); require("conexao.php"); $variable = $_POST['cat1']; $result_markers = "SELECT * FROM results where `cat` LIKE ' $variable'"; $resultado_markers = mysqli_query($link, $result_markers); // 新增查询错误检查 if (!$resultado_markers) { die('MySQL查询出错: ' . mysqli_error($link)); } header("Content-type: text/xml"); echo '<markers>'; while ($row_markers = mysqli_fetch_assoc($resultado_markers)){ echo '<marker '; echo 'id="' . $row_markers['id'] . '" '; echo 'name="' . parseToXML($row_markers['name']) . '" '; echo '/>'; } echo '</markers>';
2. 修复SQL语句的多余空格问题
你的LIKE条件里有个前置空格:LIKE ' $variable',这会强制匹配以空格开头+POST变量值的cat字段。如果数据库里的cat字段没有这个前置空格,就会查不到任何数据,自然生成的XML会异常。把空格去掉:
$result_markers = "SELECT * FROM results where `cat` LIKE '$variable'";
如果是需要模糊匹配(比如包含该变量值),改成LIKE '%$variable%'即可,但要注意下面说的SQL注入风险。
3. 用预处理语句避免SQL注入(同时解决特殊字符问题)
直接把POST变量拼进SQL语句非常危险,而且如果变量里包含单引号、斜杠这类特殊字符,会直接导致SQL语法错误——这很可能就是你出错的核心原因。改用安全的预处理语句:
require("conexao.php"); // 先处理变量不存在的情况 $variable = $_POST['cat1'] ?? ''; $variable = trim($variable); // 去掉首尾空格,避免无效匹配 // 使用预处理语句 $stmt = mysqli_prepare($link, "SELECT * FROM results where `cat` LIKE ?"); // 如果要模糊匹配,就改成 "%{$variable}%" $like_value = $variable; mysqli_stmt_bind_param($stmt, "s", $like_value); mysqli_stmt_execute($stmt); $resultado_markers = mysqli_stmt_get_result($stmt); header("Content-type: text/xml"); echo '<markers>'; while ($row_markers = mysqli_fetch_assoc($resultado_markers)){ echo '<marker '; echo 'id="' . $row_markers['id'] . '" '; echo 'name="' . parseToXML($row_markers['name']) . '" '; echo '/>'; } echo '</markers>';
4. 检查POST变量是否正确接收
确保提交表单用的是POST方法,且表单元素的name属性确实是cat1。可以在代码开头加个检查:
if (!isset($_POST['cat1']) || empty(trim($_POST['cat1']))) { die('POST变量cat1不存在或为空'); }
5. 确保XML输出无多余字符
有时候PHP文件(包括conexao.php)开头/结尾的空格、BOM字符会导致XML解析错误,检查这些文件有没有多余的空白内容,确保header()输出前没有任何echo或打印内容。
按照上面的步骤排查,应该就能解决你的问题啦~
内容的提问来源于stack exchange,提问作者Wagner Neves
相关产品推荐
相关产品推荐

