问题标签 [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 投票
4 回答
825 浏览

php - 哪些 PHP / MySQL 驱动程序或数据库抽象层支持准备好的语句?

我正在开发一个基于默认 PDO 和 PDOStatement 类的扩展版本的项目,因此它使用 PDO 样式命名参数而不是“?” 变量的占位符。

但是,客户现在要求我们考虑使用不同的驱动程序,因为他们的 OS X Web Server 版本显然无法轻松安装此驱动程序。那么是否有人知道任何其他数据库抽象库或数据库访问驱动程序,我可以很容易地使用我们当前的一组功能来扩展它们,这些功能像 PDO 一样采用命名参数?

0 投票
31 回答
352190 浏览

java - PreparedStatement IN 子句的替代方案?

IN使用带有 实例的SQL 子句的最佳解决方法是什么java.sql.PreparedStatement,由于 SQL 注入攻击安全问题,不支持多个值:一个?占位符代表一个值,而不是值列表。

考虑以下 SQL 语句:

使用本质上是对首先 preparedStatement.setString( 1, "'A', 'B', 'C'" );使用原因的解决方法的非工作尝试。?

有哪些解决方法?

0 投票
7 回答
21712 浏览

php - 准备好的语句与存储过程

如果您使用的是 php5 和 mysql5,那么使用存储过程相对于准备好的语句有很大的优势吗?(我在某处读到你可能无法从 mysql5 存储过程中获得实质性的性能提升)

0 投票
3 回答
6665 浏览

php - 动态准备语句不好吗?(用 php + mysqli)

我喜欢 Dynamic SQL 的灵活性,我喜欢 Prepared Statements 的安全性 + 改进的性能。所以我真正想要的是动态准备语句,这很麻烦,因为 bind_param 和 bind_result 接受“固定”数量的参数。所以我使用 eval() 语句来解决这个问题。但我觉得这是个坏主意。这是我的意思的示例代码

最后一个 eval() 语句是个坏主意吗?我试图通过在变量名 $param 后面封装值来避免代码注入。

有没有人有意见或其他建议?有我需要注意的问题吗?

0 投票
4 回答
17813 浏览

java - 在 Java 中记录 PreparedStatements

一直很痛苦的一件事是当您拥有 PreparedStatement 而不是查询本身时记录 SQL (JDBC) 错误。

您总是会收到以下消息:

当然,我可以编写一个辅助方法来检索值并用实际值解析/替换问号(如果我没有得到这个问题的结果,可能会走这条路),但我只是想知道是否这个问题之前已经被其他人解决了,和/或是否有任何通用的日志记录助手可以自动为我解决这个问题。

在几个答案后编辑:

到目前为止提供的库似乎适合记录调试语句,这无疑是有用的。但是,我正在寻找一种方法来获取 PreparedStatement 本身(不是某个子类)并在发生错误时记录其 SQL 语句。我不想使用 PreparedStatement 的替代实现来部署生产应用程序。

我想我正在寻找实用程序类,而不是 PreparedStatement 专业化。

谢谢!

0 投票
1 回答
527 浏览

oracle - 使用 Oracle ODBC 的准备语句与直接语句的差异

我正在使用与我的操作系统语言不同的排序规则的 Oracle 数据库。我正在使用 ODBC 驱动程序访问数据库。当我准备一个语句(例如“select * from x where=?”)时,它涉及数据库排序规则支持的特殊非 ASCII 字符,我正在查找带有字符的数据行。当我直接使用sql字符串中的参数执行选择时,找不到数据行。

0 投票
5 回答
14551 浏览

java - How to use MySQL prepared statement caching?

How do i take advantage of MySQL's ability to cache prepared statements? One reason to use prepared statements is that there is no need to send the prepared statement itself multiple times if the same prepared statement is to be used again.

When running the above Java example I see 5 pairs of Prepare and Execute commands in the mysqld log file. Moving the ps assignment outside of the loop results in a single Prepare and 5 Execute commands of course. The connection parameter "cachePrepStmts=true" doesn't seem to make any difference here.
When running a similar program using Spring and Hibernate the number of Prepare commands sent (1 or 5) depends on whether the cachePrepStmts connection parameter is enabled. How does Hibernate execute prepared statements to take advantage of the cachePrepStmts setting? Is it possible to mimic this using pure JDBC?
I was running this on MySQL Server 4.1.22 and mysql-connector-java-5.0.4.jar

0 投票
7 回答
39685 浏览

php - MySQL中非空列中的空字符串?

我曾经使用标准的 mysql_connect()、mysql_query() 等语句从 PHP 中处理 MySQL 的内容。最近我一直在转而使用美妙的 MDB2 类。除此之外,我还使用准备好的语句,因此我不必担心逃避输入和 SQL 注入攻击。

但是,我遇到了一个问题。我有一个包含几个 VARCHAR 列的表,这些列被指定为非空(即,不允许 NULL 值)。使用旧的 MySQL PHP 命令,我可以毫无问题地做这样的事情:

但是,现在,如果我有这样的查询:

然后在 PHP 中我有:

这将抛出错误“ null value violates not-null constraint

作为临时解决方法,我检查是否$value为空,并将其更改为" "(单个空格),但这是一个可怕的 hack,可能会导致其他问题。

我应该如何使用准备好的语句插入空字符串,而不是尝试插入 NULL?

编辑:这个项目太大了,无法遍历我的整个代码库,找到使用空字符串“”的任何地方并将其更改为使用 NULL。我需要知道的是为什么标准 MySQL 查询将“”和 NULL 视为两个独立的事物(我认为是正确的),但准备好的语句将“”转换为 NULL。

请注意,“”和 NULL不是一回事。例如,SELECT NULL = "";返回NULL而不是1您所期望的。

0 投票
3 回答
9434 浏览

java - 在 dbcp 中使用 PreparedStatement 池

有人能解释一下如何使用 dbcp 准备的连接池吗?(如果可能,请提供一些示例代码)。我已经想出了如何打开它——将 KeyedObjectPoolFactory 传递给 PoolableConnectionFactory。但是具体的prepared statements应该如何定义呢?现在我只使用 PoolingDataSource 从池中获取连接。如何使用池中准备好的语句?

0 投票
3 回答
24408 浏览

java - 如何将 ArrayList 绑定到 Oracle 中的 PreparedStatement?

我想知道是否有办法将 ArrayList(或任何类型的 List,就此而言)绑定到 PreparedStatement,最终将用于访问 Oracle 数据库。我发现:

PreparedStatement IN 子句的替代方案?

这似乎与我的问题相似,但这个问题更具体:我想将一个 ArrayList 绑定到一个 PreparedStatement 以在 Oracle 中使用,如果可能的话,这是如何完成的?