标签: prepared-statement

我可以将数组绑定到IN()条件吗?

我很想知道是否可以使用PDO将值数组绑定到占位符.这里的用例试图传递一个值数组以用于IN()条件.

我希望能够做到这样的事情:

<?php
$ids=array(1,2,3,7,8,9);
$db = new PDO(...);
$stmt = $db->prepare(
    'SELECT *
     FROM table
     WHERE id IN(:an_array)'
);
$stmt->bindParam('an_array',$ids);
$stmt->execute();
?>
Run Code Online (Sandbox Code Playgroud)

并让PDO绑定并引用数组中的所有值.

目前我正在做:

<?php
$ids = array(1,2,3,7,8,9);
$db = new PDO(...);
foreach($ids as &$val)
    $val=$db->quote($val); //iterate through array and quote
$in = implode(',',$ids); //create comma separated list
$stmt = $db->prepare(
    'SELECT *
     FROM table
     WHERE id IN('.$in.')'
);
$stmt->execute();
?>
Run Code Online (Sandbox Code Playgroud)

这当然能完成这项工作,但只是想知道是否有一个内置的解决方案我缺席了?

php arrays pdo prepared-statement where-in

549
推荐指数
17
解决办法
20万
查看次数

PreparedStatement IN子句替代?

将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'" );本质上是一种非工作尝试,?首先使用的原因是解决方法.

有哪些变通方法?

java security jdbc prepared-statement in-clause

328
推荐指数
9
解决办法
31万
查看次数

在准备好的声明中使用"like"通配符

我正在使用预准备语句来执行mysql数据库查询.我想基于各种关键字实现搜索功能.

为此我需要使用LIKE关键字,我知道的很多.我之前也使用过预处理语句,但我不知道如何使用它,LIKE因为从下面的代码我将添加'keyword%'

我可以直接在pstmt.setString(1, notes)as (1, notes+"%")或类似的东西中使用它.我在网上看到很多帖子,但在任何地方都没有好的答案.

PreparedStatement pstmt = con.prepareStatement(
      "SELECT * FROM analysis WHERE notes like ?");
pstmt.setString(1, notes);
ResultSet rs = pstmt.executeQuery();
Run Code Online (Sandbox Code Playgroud)

java mysql jdbc prepared-statement

159
推荐指数
4
解决办法
16万
查看次数

从java.sql.PreparedStatement获取查询

在我的代码我正在使用java.sql.PreparedStatement.

然后我执行该setString()方法来填充预准备语句的通配符.

executeQuery()调用方法并执行查询之前,有没有办法检索(并打印出)最终查询?我只想将其用于调试目的.

java jdbc prepared-statement

154
推荐指数
6
解决办法
28万
查看次数

准备好的语句如何防止SQL注入攻击?

准备语句如何帮助我们防止SQL注入攻击?

维基百科说:

准备好的语句对SQL注入具有弹性,因为稍后使用不同协议传输的参数值无需正确转义.如果原始语句模板不是从外部输入派生的,则不能进行SQL注入.

我看不清楚原因.简单的英语和一些例子中有什么简单的解释?

sql security sql-injection prepared-statement

151
推荐指数
5
解决办法
10万
查看次数

如何获取PreparedStatement的SQL?

我有一个通用的Java方法,具有以下方法签名:

private static ResultSet runSQLResultSet(String sql, Object... queryParams)
Run Code Online (Sandbox Code Playgroud)

它打开一个连接,PreparedStatement使用sql语句和queryParams变量长度数组中的参数构建一个,运行它,缓存ResultSet(在a中CachedRowSetImpl),关闭连接,并返回缓存的结果集.

我在记录错误的方法中有异常处理.我将sql语句记录为日志的一部分,因为它对调试很有帮助.我的问题是记录String变量会sql使用?而不是实际值记录模板语句.我想记录已执行(或尝试执行)的实际语句.

那么......有没有办法获得将由a运行的实际SQL语句PreparedStatement?(没有自己构建它.如果我找不到访问PreparedStatement'sSQL的方法,我可能最终会自己构建它catch.)

java sql jdbc prepared-statement

150
推荐指数
5
解决办法
23万
查看次数

PDO Prepared在单个查询中插入多行

我目前在MySQL上使用这种类型的SQL在一个查询中插入多行值:

INSERT INTO `tbl` (`key1`,`key2`) VALUES ('r1v1','r1v2'),('r2v1','r2v2'),...
Run Code Online (Sandbox Code Playgroud)

在PDO上的读数中,使用预处理语句应该比静态查询具有更好的安全性.

因此,我想知道是否可以使用预准备语句生成"通过使用一个查询插入多行值".

如果是,我可以知道如何实施它?

php pdo insert prepared-statement

136
推荐指数
8
解决办法
15万
查看次数

PreparedStatement如何避免或阻止SQL注入?

我知道PreparedStatements避免/阻止SQL注入.它是如何做到的?使用PreparedStatements构造的最终表单查询是字符串还是其他?

java sql sql-injection jdbc prepared-statement

111
推荐指数
4
解决办法
10万
查看次数

97
推荐指数
4
解决办法
8万
查看次数

多次重用PreparedStatement

如果将PreparedStatement与没有任何池的单个公共连接一起使用,我是否可以为每个dml/sql操作重新创建一个实例来保证预处理语句的强大功能?

我的意思是:

for (int i=0; i<1000; i++) {
    PreparedStatement preparedStatement = connection.prepareStatement(sql);
    preparedStatement.setObject(1, someValue);
    preparedStatement.executeQuery();
    preparedStatement.close();
}
Run Code Online (Sandbox Code Playgroud)

代替:

PreparedStatement preparedStatement = connection.prepareStatement(sql);
for (int i=0; i<1000; i++) {
    preparedStatement.clearParameters();
    preparedStatement.setObject(1, someValue);
    preparedStatement.executeQuery();
}
preparedStatement.close();
Run Code Online (Sandbox Code Playgroud)

我的问题是因为我想把这段代码放到多线程环境中,你能给我一些建议吗?谢谢

java jdbc prepared-statement

95
推荐指数
2
解决办法
10万
查看次数