将SQL IN
子句与实例一起使用的最佳解决方法java.sql.PreparedStatement
是什么,由于SQL注入攻击安全问题,多个值不支持这种解决方法:一个?
占位符代表一个值,而不是值列表.
请考虑以下SQL语句:
SELECT my_column FROM my_table where search_column IN (?)
Run Code Online (Sandbox Code Playgroud)
使用preparedStatement.setString( 1, "'A', 'B', 'C'" );
本质上是一种非工作尝试,?
首先使用的原因是解决方法.
有哪些变通方法?
在T-SQL中,您可以进行如下查询:
SELECT * FROM Users WHERE User_Rights IN ("Admin", "User", "Limited")
Run Code Online (Sandbox Code Playgroud)
你会如何在LINQ to Entities查询中复制它?它甚至可能吗?
有没有办法绕过静态IN子句中1000项的Oracle 10g限制?我有一个以逗号分隔的列表,其中列出了我想在IN子句中使用的许多ID,有时这个列表可能超过1000个项目,此时Oracle会抛出错误.查询与此类似...
select * from table1 where ID in (1,2,3,4,...,1001,1002,...)
Run Code Online (Sandbox Code Playgroud) 如何在执行查询时在JDBC中的preparedStatement中设置in子句的值.
例:
connection.prepareStatement("Select * from test where field in (?)");
Run Code Online (Sandbox Code Playgroud)
如果此子句可以包含多个值,我该怎么做.有时我事先知道参数列表,有时我事先不知道.如何处理这种情况?
Postgres是数据库
我可以为IN子句使用NULL值吗?例:
SELECT *
FROM tbl_name
WHERE id_field IN ('value1', 'value2', 'value3', NULL)
Run Code Online (Sandbox Code Playgroud)
我想限制这四个值.
我已经尝试了上面的语句,它不起作用,它执行但不添加NULL id_fields的记录.
我还试图添加一个OR条件,但这只是使查询运行并运行,看不到任何结束.
SELECT *
FROM tbl_name
WHERE other_condition = bar
AND another_condition = foo
AND id_field IN ('value1', 'value2', 'value3')
OR id_field IS NULL
Run Code Online (Sandbox Code Playgroud)
有什么建议?
疯狂尝试在类型的查询中设置变量:
SET @idcamposexcluidos='817,803,495';
Run Code Online (Sandbox Code Playgroud)
所以我可以在它上面使用它
WHERE id_campo not in (@idcamposexcluidos)
Run Code Online (Sandbox Code Playgroud)
我尝试用不同的格式定义变量而没有运气,似乎没有找到上面的具体示例:
SET @idcamposexcluidos='(817,803,495)';
...
WHERE id_campo not in @idcamposexcluidos
SET @idcamposexcluidos=817,803,495;
Run Code Online (Sandbox Code Playgroud)
没有成功.它要么返回错误要么忽略值.
我有三个表来定义用户:
USER: user_id (int), username (varchar)
USER_METADATA_FIELD: user_metadata_field_id (int), field_name (varchar)
USER_METADATA: user_metadata_field_id (int), user_id (int), field_value (varchar)
Run Code Online (Sandbox Code Playgroud)
我想创建一个中间层用户,该用户可以访问应用程序中的其他用户.要确定登录使用的用户可以访问哪些用户,我使用如下的子查询:
SELECT user_id FROM user WHERE user_id
IN (SELECT user_id
FROM user_metadata
WHERE user_metadata_field_id = 1 AND field_value = 'foo')
Run Code Online (Sandbox Code Playgroud)
目前,我将子查询字符串存储在变量中,然后在每次需要提取用户列表时将其动态插入到外部查询中.在这样做之后,我想,"只需存储一串实际的user_id
s 就更好了".
所以不要将其存储在变量中......
$subSql = "SELECT user_id FROM user_metadata WHERE user_metadata_field_id = 1 AND field_value = 'foo'";
Run Code Online (Sandbox Code Playgroud)
...我实际执行查询并存储结果,如...
$subSql = "12, 56, 89, 100, 1234, 890";
Run Code Online (Sandbox Code Playgroud)
然后当我需要拉出登录用户可以访问的点亮用户时,我可以这样做:
$sql = "SELECT user_id FROM user WHERE user_id IN ($subSql)";
Run Code Online (Sandbox Code Playgroud)
最后问题是:
您可以在MySQL IN …
当您执行IN
子句为空的SQL查询时会发生什么?
例如:
SELECT user WHERE id IN ();
Run Code Online (Sandbox Code Playgroud)
MySQL是否会按预期处理(即始终为false),如果没有,我的应用程序在IN
动态构建子句时如何处理这种情况?
我正在使用PDO执行一个带有IN
子句的语句,该子句使用数组作为它的值:
$in_array = array(1, 2, 3);
$in_values = implode(',', $in_array);
$my_result = $wbdb->prepare("SELECT * FROM my_table WHERE my_value IN (".$in_values.")");
$my_result->execute();
$my_results = $my_result->fetchAll();
Run Code Online (Sandbox Code Playgroud)
上面的代码完全正常,但我的问题是为什么这不是:
$in_array = array(1, 2, 3);
$in_values = implode(',', $in_array);
$my_result = $wbdb->prepare("SELECT * FROM my_table WHERE my_value IN (:in_values)");
$my_result->execute(array(':in_values' => $in_values));
$my_results = $my_result->fetchAll();
Run Code Online (Sandbox Code Playgroud)
此代码将返回my_value
等于$in_array
(1)中第一项的项,但不返回数组中的其余项(2和3).
假设我得到以下内容:
DECLARE @ExcludedList VARCHAR(MAX)
SET @ExcludedList = 3 + ', ' + 4 + ' ,' + '22'
SELECT * FROM A WHERE Id NOT IN (@ExcludedList)
Run Code Online (Sandbox Code Playgroud)
错误:将varchar值','转换为数据类型int时转换失败.
我理解为什么错误存在,但我不知道如何解决它...