问题标签 [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.
php - Mysqli Prepare 语句 - 返回 False,但为什么?
我有一个函数,它根据要插入该列的列名和值的关联数组以及表名(一个简单的字符串)生成准备好的 INSERT 语句:
我的问题是 $this->conn->prepare (它是一个类的一部分,conn 是一个新的 mysqli 对象,它可以正常工作)返回 false,但没有给我一个理由!
这是为准备语句构建的示例 $sqlString:
任何人都可以看到这个参数化语句有问题吗?准备函数返回false的任何原因?
sql - 重复的 SQL 查询
执行循环 SQL 查询的最佳实践是什么?我的理解是使用参数化查询并在第一次执行时将其转换为准备好的语句。如果这个查询需要多个线程执行怎么办?我需要为每个线程的每种类型的查询创建一个准备好的语句吗?还是如今 SQL 语句的解析如此高效以至于不再需要准备好的语句?
java - 防止没有准备好的语句的 SQL 注入 (JDBC)
我有一个数据库日志附加程序,它每隔一段时间将可变数量的日志行插入数据库。
我想以一种防止 SQL 注入的方式创建一个 SQL 语句,但不使用服务器端准备好的语句(因为我在每个选择中都有可变数量的行,缓存它们无济于事,但可能会损害这里的性能) .
我也喜欢准备好的语句的便利性,并且更喜欢它们而不是字符串连接。是否有类似“客户端准备好的声明”之类的东西?
java - ejb3中准备好的语句
我想在 ejb3 中使用准备好的语句在 oracle 中插入数据。是否可以使用。
我试图在网上找到一些例子,但我找不到任何好的例子。
请帮我使用它。或者有没有其他方法可以在 ejb3 中使用参数查询(就像我们在准备好的语句中使用 ? 一样)
谢谢并恭祝安康
mysqli - MySQL LOAD_FILE() 的正确使用
如果这是一个密集的问题,我深表歉意,但我在使用 MYSQL LOAD_FILE() 和准备好的语句来上传图像 BLOB 时遇到了一些麻烦。因此,我不得不求助于使用来分隔查询,一个用于准备详细信息的语句,另一个不准备插入我的 BLOB 的语句。这是我尝试过的查询示例:
不幸的是,这个查询失败了,我似乎无法从中得到任何错误。相反,这是我当前的查询,它有效,但不使用准备好的语句,而且安全性较低:
由于所有细节目前都未转义,我宁愿不经历使用 nl2br() 的过程并再次返回,我正在考虑两个查询:一个使用 $_POST 变量的准备好的语句,然后另一个使用 addlashes () 和文件的常规语句。我希望能够在一个准备好的语句中完成整个插入。非常感谢任何帮助和理解!
php - 数据库类中的准备好的语句
问题
所以我正在编写我的基于 Web 的应用程序,我突然意识到“杜尔,你的东西对 SQL 注入和诸如此类的东西很开放!重写 db 类!”
我目前正在重写我的$db
课程,并且在理解我应该如何实现准备好的语句时遇到了很大的麻烦。
之前...
我曾经使用过这样的东西:
在执行 select 语句时,我总是抓取一个数组,然后循环遍历结果。
我明白那个...
- 我应该因为在 MySQL 中使用未准备好的语句而被烧死。
- 我必须让mysql知道每个变量是什么类型的参数。(或者我)?
我想...
能够将我的查询和值传递给我的新函数(让我们以 select 为例),然后它将返回一个结果供我使用(作为 assoc.array 值);
我有麻烦...
了解我如何将所有信息整合在一起。
- 如何呈现一组值并将其与我准备好的语句混合在一起?
- 有了所说的糊状语句,我该如何运行它(
execute()
?)并让它返回一个数组?
如果我的问题有点迂回,我很抱歉,但是我因为试图理解它而感到疲倦。如果需要更多信息,请告诉我,我会添加。
mysql - 如何在 MySQL 查询浏览器中设置查询参数?
MySQL 查询浏览器可以设置参数化查询的参数吗?如果是这样,怎么做?我尝试填充“参数浏览器”选项卡,但在执行查询时它似乎并没有实际设置参数。
我在 Google 中搜索了很长时间(例如mySQL Query Browser parameterized),但没有找到答案。
我在 mySQL 论坛上找到了这个帖子——听起来我不是唯一一个在这里摸不着头脑的人。
如果这很重要,我在 Windows Server 2008(客户端和服务器)上使用 5.1 版。
java - 如何在准备好的语句上设置参数列表?
我有一个名字列表,例如:
和声明:
如何执行以下操作:
有解决方法吗?有人可以解释为什么缺少这种方法吗?
使用:java、postgresql、jdbc3
mysql - 如何从准备好的语句中获取查询计划
我不记得曾经看到过从控制台使用准备好的语句的方法,并且不知何故不认为运行解释查询被认为是来自 API 的准备好的语句会得到我想要的。
这与我的这个老问题有关。
我主要对 MySQL 感兴趣,但也会对其他 DB 感兴趣。
java - 如何在并发批处理中绕过 JDBC 语句缓存?
我正在开发一个服务器,它应该接收来自数百个业务部门的夜间报告。报告当前是加密的 csv 文件。每天的报告总数应达到 500 000 到 1 000 000 条记录,这些记录将保存到数据库中以备后用。
我为每个传输创建了一组 PreparedStatements。这些语句用于在执行和提交之前批处理 50 条记录。每条记录可能会导致多达 20 次数据库插入。当传输被排队并逐一处理时,一切都很好。
当我尝试同时执行此操作时,我注意到不同的线程获得了完全相同的 PreparedStatements 实例。这导致了以下问题
- 多个线程将语句添加到同一个批处理中
- 当任何线程决定是时候执行批处理时,批处理正在执行
- 当数据库不满足它的约束时调用提交,因为一些线程没有时间使用一些语句
问题是:有没有办法强制创建一个准备好的语句,而不是重用语句缓存中的现有语句?
如果没有,有没有比通过
- 为没有语句/连接池的批次创建单独的数据源
- 从数据库中删除约束;插入顺序不再重要
- 强制顺序处理
编辑:尝试澄清问题
假设有线程 T1 和 T2。假设有准备好的语句 S1 和 S2。假设有批次 B1 和 B2。
每次使用 S1 时,都会将其添加到 B1。每次使用 S2 时,都会将其添加到 B2。提交时,每个外键约束必须在 S2 之前提交 S1。
问题发生时
- T1 兴高采烈地处理传输
- T2 无辜地处理传输
- T1 使用语句 S1 将 s1a 添加到包含 s1a 的批次 B1
- T1 使用语句 S2 将 s2a 添加到包含 s2a 的批次 B2
- T1 决定是时候提交了
- T1 提交包含 s1a 的批次 B1
- T2 使用 S1 将 s1b 添加到包含 s1b 的批次 B1
- T2 使用 S2 将 s2b 添加到包含 s2a、s2b 的批次 B2
- T1 提交包含 s2a、s2b 的批次 B1
- 数据库说“不”,因为 s2b 在 s1b 之前提交,这在外键中是被禁止的。
这可以通过手动同步以及在答案中指出来避免,但是我仍然必须单独跟踪每个批次的大小,而不是对每个线程应用本地逻辑。