首页 > 解决方案 > 如何将 PHP 逗号分隔的字符串集成到 SQL 查询中?

问题描述

不幸的是,我不明白...

我有一个 php 变量,其中包含逗号分隔的数字作为字符串:

$var = $_POST['postvar'];

而 postvar 包含字符串:1,2,3,4,5,6,7,8,9,10

我想在 SQL 查询中使用这个字符串:

SELECT * FROM table WHERE id NOT IN ('$var');

但是 MS SQL 忽略了我的身份限制。

错误在哪里?

太感谢了!

标签: phpsqlsql-serverstring

解决方案


不要在 SQL 查询中使用连接!

首先检查每个值是否为 int 或强制转换,例如:

<?php

$var = '1,2,3,4,5,6,7,8,9,10,11);DROP table users;--';

$var = explode(',', $var);

array_walk($var, function(&$value){
    $value = (int) $value;
});

print_r($var);

https://3v4l.org/AGRqL

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
    [6] => 7
    [7] => 8
    [8] => 9
    [9] => 10
    [10] => 0
)

然后在构建查询字符串后使用准备好的查询 [ sqlsrv_prepare() ]:

$sql = '
    SELECT * 
    FROM table 
    WHERE id NOT IN (
        '.implode(',', array_fill(0, count($var), '?')).'
    )
';

echo $sql;

https://3v4l.org/oU6iB


推荐阅读