SQL Server含空格承运商名称查询无结果及HTTP400问题求助
解决方案:承运商名称含空格时SQL查询无结果+HTTP 400错误
1. 先解决HTTP 400请求错误
你遇到的HTTP/1.1 400 Bad Request是因为URL参数里的空格未做URL编码,直接拼接带空格的字符串会被服务器判定为非法请求。
修复方法:用PHP的urlencode()函数对承运商名称参数编码后再拼入URL:
$transpName = 'LE CALVEZ'; // 示例承运商名称 $encodedName = urlencode($transpName); $url = "http://xxxxxxxxx:xxxx/index.php?page=ListeMouvementsTransporteurAPI&transp={$encodedName}"; // 之后再用file_get_contents或curl请求编码后的URL
编码后空格会被转为%20,服务器就能正确解析参数。
2. 修复SQL Server查询匹配问题
错误根源
之前尝试的[]、MySQL风格的`都是无效操作——SQL Server用[]包裹字段名,但你是匹配字段值,不需要这些符号;而LIKE %xxx%是模糊匹配逻辑,和你需要的精确匹配需求不符。
正确的PDO预处理写法
用PDO参数绑定确保查询安全且准确,同时处理可能的前后空格问题:
// 假设已初始化PDO连接$pdo $transp = $_GET['transp']; // 可选:如果数据库中名称存在前后空格,先清理参数 $transp = trim($transp); // 编写预处理语句,用DATEADD筛选过去7天的记录 $stmt = $pdo->prepare(" SELECT * FROM 你的运输记录表名 WHERE nomTransporteur = :transp AND 运输日期字段 >= DATEADD(day, -7, GETDATE()) "); // 绑定参数并指定字符串类型 $stmt->bindParam(':transp', $transp, PDO::PARAM_STR); $stmt->execute(); // 获取查询结果 $records = $stmt->fetchAll(PDO::FETCH_ASSOC);
额外检查点
- 确认数据库中
nomTransporteur字段的值是否含隐藏空格(如全角空格、制表符),可执行SELECT LEN(nomTransporteur) FROM 表名 WHERE nomTransporteur LIKE '%LE CALVEZ%'对比参数长度。 - 若需忽略空格差异匹配,可使用
REPLACE(nomTransporteur, ' ', '') = REPLACE(:transp, ' ', ''),但此写法会导致索引失效,数据量大时不建议使用。
内容的提问来源于stack exchange,提问作者Fabien Gréaux
相关产品推荐
相关产品推荐

