SQL Server 2014与PHP实现特定前缀NPA数据查询的方法
没问题,我来帮你搞定这个需求!首先咱们先从SQL Server的查询语句入手,然后再结合PHP代码实现,同时还会注意避免SQL注入的安全问题~
1. SQL Server 查询语句写法
你的目标是获取前6位为010101、010102、010103的NPA数据,这里提供两种常用且高效的写法:
方法一:使用LEFT函数匹配前缀
这种方法直接截取NPA的前6位,判断是否在目标前缀列表中,可读性很强:
SELECT NPA, nama FROM 你的数据表名 -- 记得替换成实际的表名 WHERE LEFT(NPA, 6) IN ('010101', '010102', '010103');
方法二:使用LIKE模糊匹配
如果NPA字段建有合适的索引,这种写法在性能上可能更有优势:
SELECT NPA, nama FROM 你的数据表名 WHERE NPA LIKE '010101%' OR NPA LIKE '010102%' OR NPA LIKE '010103%';
2. 结合PHP实现(安全版,避免SQL注入)
你已经定义了$npa1 = 01、$npa2 = 02、$npa3 = 03,我们可以用这些变量动态生成目标前缀,同时用预处理语句保证代码安全。这里以SQL Server官方推荐的SQLSRV扩展为例:
<?php // 数据库连接参数 $serverName = "你的服务器地址"; $connectionInfo = array( "Database" => "你的数据库名", "UID" => "数据库用户名", "PWD" => "数据库密码" ); // 建立数据库连接 $conn = sqlsrv_connect($serverName, $connectionInfo); if ($conn === false) { die(print_r(sqlsrv_errors(), true)); } // 注意:变量用字符串类型存储,避免前导零丢失 $npa1 = '01'; $npa2 = '02'; $npa3 = '03'; // 生成目标前缀数组 $targetPrefixes = array( '0101' . $npa1, '0101' . $npa2, '0101' . $npa3 ); // 构建预处理语句的占位符 $placeholders = implode(',', array_fill(0, count($targetPrefixes), '?')); $sql = "SELECT NPA, nama FROM 你的数据表名 WHERE LEFT(NPA, 6) IN ($placeholders)"; // 准备预处理语句 $stmt = sqlsrv_prepare($conn, $sql, $targetPrefixes); if ($stmt === false) { die(print_r(sqlsrv_errors(), true)); } // 执行查询 if (sqlsrv_execute($stmt) === false) { die(print_r(sqlsrv_errors(), true)); } // 遍历并输出结果 while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) { echo "NPA: " . $row['NPA'] . " | Nama: " . $row['nama'] . "<br>"; } // 释放资源并关闭连接 sqlsrv_free_stmt($stmt); sqlsrv_close($conn); ?>
关键注意点:
- 一定要用字符串类型存储
$npa1这类变量,否则数字形式的01会自动转为1,导致前缀拼接错误。 - 预处理语句能有效防范SQL注入,绝对不要直接把变量拼接到SQL语句里。
- 如果你的PHP环境用PDO连接SQL Server,核心逻辑类似,同样需要通过绑定参数实现安全查询。
内容的提问来源于stack exchange,提问作者f4ray
相关产品推荐
相关产品推荐

