php - 如何将 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 忽略了我的身份限制。
错误在哪里?
太感谢了!
解决方案
不要在 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;
推荐阅读
- visual-studio-code - 无法使用 VSCode 在远程服务器中打开现有的 jupyter 笔记本
- python - Shady 中的自定义传递函数(或 LUT)
- c# - "SqlCommandTimeout" value="120" SQL 异常
- apache-spark - Databricks - 如何确定分区数?
- firebase - 对等点之间的 Flutter-Firebase 文件查看/下载
- python - 列表 A 是否有任何不在列表 B 中的项目
- angular - 查找 OpenLayers 数组的索引
- javascript - 从 WKWebView 中的 URL 运行 Javascript
- python - 在 Python 中取 np.ndarray 的点积
- javascript - e.target.value 未定义