php - 为每个查询创建新连接?

标签 php mysql

注意:我用谷歌翻译来写这篇文章

为了使用 MySQL,我一直执行以下操作:

-> Open Connection to the database.
-> see details
-> Insert Data
-> another query
-> close Connection

我通常在关闭前使用同一个连接做各种事情。 一位在墨西哥的 IPN 研究这个的 friend 向我提到,正确的方法(为了安全)是为每个查询建立一个新的连接,例如:

-> Open Connection to the database.
-> see details
-> close Connection
-> Open Connection to the database.
-> Insert Data
-> close Connection
-> Open Connection to the database.
-> another query
-> close Connection

我的问题是,什么是正确的做法?我的方法是对数据库进行最少的查询,只建立一个连接并保持它直到它不再为我服务。

另外,是否可以对表进行双重插入?例如:

insert into table1(relacion) values([insert into tablaRelacionada(id) values("dato")]);

“relacion”是从“tablaRelacionada”中的第一个查询插入的 ID。

最佳答案

不,不可能使用单个 INSERT 语句将行插入到两个不同的表中。 (您可以使用触发器来完成它,但该触发器需要发出单独的 INSERT 语句...从客户端看,它看起来像一个语句,但在服务器上,会有是执行的两个 INSERT 语句。


如果性能和可伸缩性不是问题,那么“搅动”连接是可行的。为每个语句创建单独的连接不一定是“错误”的,但它会占用大量资源。创建新 session 有很多开销。 (从客户端看起来相当简单,但除了客户端的代码路径之外,它还需要在服务器端做大量工作。)

重用现有连接是一种常见模式。这是实现“连接池”的最大好处之一,可以轻松地重用连接而无需“搅动”、反复连接和断开与数据库的连接。

就以某种方式增加“安全性”的每个 SQL 语句的单独连接而言,这有点牵强。

但我可以看到具有新初始化 session 的一些好处。

例如,如果您重用一个现有的 session ,您可能不知道 session 状态发生了哪些变化。之前所做的任何更改仍然“有效”。这将是诸如 session 变量设置(例如时区、字符集、自动提交、用户定义的变量)之类的东西,它们可能会对当前语句产生影响。但是在一个脚本中,如果您获得了新的连接,您应该知道已经进行了哪些更改,所以这应该不是真正的问题。 (如果使用池中的连接,这将是一个更大的问题,其中连接由多个进程共享。一个进程与时区或字符集混淆可能会给重用该连接的其他进程带来一系列问题。)

关于php - 为每个查询创建新连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22027564/

相关文章:

mysql - 如何在 Ruby on Rails 中使用相同的 HTML 表单更新或保存记录?

mysql - 选择 DISTINCT 并选择 COUNT

php - 使用带分页的 count++ 函数

mysql - MySQL服务无法启动

php - num_rows() 函数不适用于 codeigniter 中的 MSSQL

php - 在准备好的语句中获取失败的查询

javascript - 如何通过javascript将网站代码包含到iframe中?

php - 如何从新增加的id PHP的sql中获取值

php - 上传文件后更新数据库的问题

php一段时间后插入数据