不幸的是,我不明白...
我有一个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限制。
哪里出了错?
非常感谢您!
答案 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);
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;