问题标签 [prepared-statement]

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 投票
1 回答
1658 浏览

php - MySQL 准备好的查询是否为每会话一次查询提供了性能优势?

根据文档,如果您多次运行查询,准备好的查询会提供显着的性能优势,因为 MySQL 服务器解析查询的开销只发生一次。我想知道那里的“多次”到底是什么意思。

即,假设您有一个网页运行一次查询。现在假设该页面每秒被调用 50 次。从性能的角度来看,prepare() 查询是否更有意义(因此需要两次往返数据库服务器;一次准备查询,一次运行查询)或仅正常发送查询(只需要一次往返) ? MySQL 和/或 PHP mysqli 驱动程序是否足够聪明,可以意识到在之前的调用中何时准备()查询?

0 投票
7 回答
18840 浏览

php - 具有可变大小变量列表的 MySQL 准备语句

你将如何在 PHP 中编写一个准备好的 MySQL 语句,它每次都需要不同数量的参数?此类查询的一个示例是:

该子句每次运行时IN都会有不同数量的s。id

我有两种可能的解决方案,但想看看是否有更好的方法。

可能的解决方案 1使语句接受 100 个变量,并用保证不在表中的虚拟值填充其余变量;多次调用超过 100 个值。

可能的解决方案 2不要使用准备好的语句;为可能的注入攻击构建和运行查询检查。

0 投票
1 回答
5836 浏览

java - Java PreparedStatements 中的通配符

这是我当前的 SQL 语句:

它会返回与专辑或艺术家姓名完全匹配的内容,但不会返回任何其他内容。我不能在语句中使用“%”,否则会出错。

如何在准备好的语句中添加通配符?

(我正在使用 Java5 和 MySQL)

谢谢!

0 投票
3 回答
3053 浏览

.net - 没有 DBType 的 AddWithValue 导致查询运行缓慢

我一直在使用 cmd.Parameters.AddWithValue,并且没有指定 DBType (int, varchar,...) 来运行查询。查看 SQL Profiler 后,使用此方法运行的查询似乎比指定数据类型时运行得慢很多。

为了让您了解它有多慢,这里有一个例子。该查询是对单个表的简单查找,并且对 where 语句中的列进行索引。指定数据类型时,某个查询运行大约 0 MS(对于 sql server 来说太小无法测量),并且需要 41 次读取。当我删除 DBType 时,完成查询可能需要大约 200 毫秒和 10000 次读取。

我不确定这是否只是 SQL Profiler 误报的值,或者这些值实际上是否正确,但它是可重现的,因为我可以添加和删除 DBType,它会生成 SQL Profiler 中给出的值。

有没有其他人遇到过这个问题,以及解决它的简单方法。我意识到我可以在整个代码中添加数据类型,但这似乎需要添加很多东西,如果有更简单的方法来修复它,那将不胜感激。

[编辑]

经过一些初始测试(在循环中运行两个场景)后,探查器给出的值似乎是准确的。

正如添加的信息一样,我在 Windows XP Pro 上运行 .Net 2.0,在 Windows 2000 上为 DB 运行 SQL Server 2000。

[更新]

经过一番挖掘,我找到了这篇博文,这可能是相关的。似乎 .Net 中的字符串值(因为它们是 unicode)被自动创建为 nvarchar 参数。我将不得不等到星期一开始工作,看看我是否可以解决这个问题。似乎我必须设置数据类型,这是我试图避免的。

这个问题并没有出现在我所做的每个查询中,只是选择了几个,所以我仍然可能只是在有问题的查询中设置 DBType,但我正在寻找一个更通用的解决方案。

0 投票
3 回答
9986 浏览

java - Java:从字符串创建日期对象并插入 MySQL

任何时候我必须在 java 中处理日期/时间,这让我很难过

我正在尝试解析字符串并将其转换为日期对象以插入到preparepared 语句中。我一直试图让这个工作,但没有运气。当我去编译类时,我也会收到有用的错误消息。

“线程“主”java.lang.Error 中的异常:未解决的编译问题:PreparedStatement 类型中的方法 setDate(int, Date) 不适用于参数 (int, Date)”

嗯,WTF?

这是有问题的代码。

0 投票
5 回答
30408 浏览

php - 在 mysqli 准备好的语句中使用空值

在 mysqli 准备好的语句中,NULL 变成 ''(在字符串的情况下)或 0(在整数的情况下)。我想将其存储为真正的 NULL。有没有办法做到这一点?

0 投票
6 回答
3135 浏览

java - 嵌套 PreparedStatements 的最佳实践是什么?

我有几个实例,其中一部分遗留 sql 语句基于依赖项。例如。

我正在用这个遗留代码创建 PreparedStatements。这里的最佳做法是什么。我应该为 var SQL 创建一个 PreparedStatement 并将其嵌套在 SQL2 中吗?是否应该有多个基于 SQL2 的 PreparedStatement 没有嵌套,或者完全不同?

代码比示例复杂得多,因为 SQL var 在许多长而复杂的 SQL 查询中重复使用。

编辑:项目设计需要使用 PreparedStatements,目前我没有选择使用库。

0 投票
2 回答
1431 浏览

java - 如何在 Java 中准备 SQL 查询时设置整数列表

我有这样的查询 - select * from tbl where ... and colname in (2,3,4)

当我在 Java 中使用 PreparedStatement 准备查询(... ' colname in (?)' )时,我应该调用什么 setter 方法来设置这些整数?整数在 int 数组中可用,并且大小不同。如果重要的话,数据库是 MySQL 并且有问题的列是 int 类型。

0 投票
5 回答
1818 浏览

java - 我是否应该为我在 Java 中的所有数据库插入使用 PreparedStatements?

在 Java 中将变量插入数据库之前转义变量的推荐方法是什么?

据我了解,我可以使用 PreparedStatement.setString() 来转义数据,但是如果我不打算再次运行相同的查询,PreparedStatement 似乎有些不切实际。有没有更好的方法可以在不准备每个查询的情况下做到这一点?

0 投票
5 回答
16570 浏览

java - Java 的 PreparedStatement 是如何工作的?

我打算用对象替换重复执行的 Statement 对象PreparedStatement以提高性能。我正在使用 MySQL 函数now()和字符串变量等参数。

PreparedStatement我见过的大多数查询都包含常量值(如10和字符串"New York")作为?查询中使用的参数。我将如何使用now(), 和变量等函数作为参数?是否有必要?在查询中使用 s 而不是实际值?我很困惑。