如何将PHP逗号分隔的String集成到SQL查询中?

时间:2018-08-03 07:38:37

标签: php sql sql-server string

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

我有一个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忽略了我的id限制。

哪里出了错?

非常感谢您!

1 个答案:

答案 0 :(得分:1)

不要在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