问题标签 [sql-parametrized-query]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
94846 浏览

sql - 如何创建参数化 SQL 查询?我为什么要?

我听说“每个人”都在使用参数化的 SQL 查询来防止 SQL 注入攻击,而不必验证每一个用户输入。

你怎么做到这一点?使用存储过程时你会自动得到这个吗?

所以我的理解是非参数化的:

这会参数化吗?

还是我需要做一些更广泛的事情来保护自己免受 SQL 注入?

除了安全考虑之外,使用参数化查询还有其他优点吗?

更新:这篇很棒的文章链接到 Grotok 的一个问题引用中。 http://www.sommarskog.se/dynamic_sql.html

0 投票
5 回答
157573 浏览

python - Python MYSQL 更新语句

我试图让这个 Python MYSQL 更新语句正确(带变量):

有什么想法我哪里出错了吗?

0 投票
9 回答
146033 浏览

php - 在带有 PDO 的 PHP 中,如何检查最终的 SQL 参数化查询?

在 PHP 中,当使用带有参数化查询的 PDO 访问 MySQL 数据库时,如何检查最终查询(在替换所有令牌之后)?

有没有办法检查数据库真正执行了什么?

0 投票
5 回答
3951 浏览

sql - 为什么使用参数化查询将数据插入表中比将值附加到查询字符串更快?

为什么使用参数化查询将数据插入表中:

比将值附加到查询字符串更快:

?

当我在循环中使用该命令插入 10K 行时,参数化查询比另一个查询快一个数量级。

我知道参数化查询具有安全性和可维护性优势,并且是推荐的使用方式,但现在我有兴趣解释为什么它要快得多?

0 投票
1 回答
1285 浏览

devart - 参数化查询的 Devart Oracle 提供程序直接模式问题

我在直接模式下的参数化查询遇到了一些奇怪的问题。

基本上,如果我在已经包含唯一行的表上执行插入,我会得到预期的插入异常。在插入异常之后,我使用相同的连接来获取已锁定数据的信息以报告用户(我知道此时连接仍然良好)。然后关闭此连接并返回到池中,所有这些都按预期进行。

在稍后从池中获取此连接时,我尝试执行简单的更新参数化查询,但出现以下异常:ORA-01008:并非所有变量都绑定。如果没有绑定所有变量,这将是有意义的,但是查看 OracleParameter 集合我可以清楚地看到所有参数都存在并且它们的值是正确的。更不用说在从池中为池中的其他连接获取此连接之前,此查询会运行多次,因为它是针对每个客户端请求更新的通用更新表。此外,所有这些代码都可以在使用 oracle 客户端关闭直接模式的情况下正常工作(与直接模式下的代码和查询执行完全相同)。

基本上,由于某种原因,在直接模式下,当执行插入并失败并且连接被关闭并放回池中时,连接变得损坏并在再次与参数化查询一起使用时失败。

我会制作一个简单的样本,唯一的问题是这个问题在简单的情况下不能可靠地重现。

信息:

  • 这是一个客户端服务器应用程序。即使是单个客户端也会出现问题。
  • 为每个客户端请求创建并从池中获取连接,并在执行请求后关闭。
  • 每个连接都在单个线程中使用(而不是跨多个线程)
  • 使用最新的 Devart.Data.Oracle 5.35.54 和 Devart.Data 5.0.16,我也尝试过使用以前的版本,结果相同。

如果有人遇到此问题或有任何想法,我们将不胜感激

谢谢

0 投票
1 回答
4112 浏览

python - 使用 psycopg2 进行参数化查询:从 Python 列表中选择

给定 Python 中的一个大 (~10,000) 整数列表,我如何有效地SELECT从 id 在列表中的表中的所有项目?

我试过了:

表中确实存在第二个和第三个 ID(97600168、97611194)。

0 投票
2 回答
1191 浏览

python - 是否有任何安全的方法来参数化 MySQL 查询中的数据库名称?

我正在编写一个小 Python 脚本来帮助我为我的个人项目自动创建 mysql 数据库和相关帐户。该脚本的一部分是一个函数,它将数据库名称作为字符串,然后去创建数据库。

这不起作用,因为MySQL 的 CREATE DATABASE要求数据库的不带引号的名称,如

但是我尝试将用户提供的数据库名称安全地插入到查询中的代码会创建:

你会得到“你的 MySQL 语法在测试附近有问题”。

即使这是供个人使用,我真的不想直接将用户提供的字符串插入到任何类型的查询中。它反对我的宗教。是否有一种安全的方法可以将用户提供的数据库名称插入到 python(或任何语言)中的 mySQL 查询中,以确保用户输入(例如test_db; DROP some_other_db;将被拒绝或正确转义)?

0 投票
1 回答
449 浏览

c# - 在 c# 中从数据访问层添加 SQL 参数的问题

首先我给出两种方法的例子

另一种方法是

我已经注释掉了

这里的大写术语都是类中上面的所有常量,例如

SELECT 也被正确定义。我完美地使用了这个层。但是现在发生了一种情况,我对该怎么做感到困惑。到目前为止,我一直在添加具有一对一关系的参数的值。但是,在我的第二种方法中,我使用 between 运算符,其中两个值引用一个参数,我将在这里写什么以使事情正常工作。我已经注释掉了我想要修改的特定区域。如果可能,请帮助我。下面是方法 GetSQLParameters public static List GetSQLParameters(DAOParameters dps) { List parameters = new List();

0 投票
2 回答
3572 浏览

sql - 使用多个参数返回结果的 SQL 存储过程

我想创建一个存储过程,它返回搜索“相似记录”的结果。我目前拥有的存储过程如下

我遇到的问题是,当它执行时,我得到一个返回值 0 并且结果行不显示(SQL Server Management Studio)。

我可以确认我在参数中传递了正确的值,并且确实存在多个记录。

这是运行时的执行语句

0 投票
1 回答
171 浏览

c# - 无法使用 C# 的参数化查询显示数据

我正在尝试使用参数化查询显示数据

我如何让它工作?