应用程序是 PHP + MSSQL。在多个连接中错误地更新。我有两个连接。
- 打开连接1。
- 做一些过程。
- 开放连接2。(注意:要打开 connection2,我们需要 connection1 数据库。)
- 在连接 2 中进行一些更新。
- 关闭连接2。
- 在connection1中更新和插入过程。但系统错误地更新到 connection2 数据库而不是 connection1。
应该如何处理多个连接。
应用程序是 PHP + MSSQL。在多个连接中错误地更新。我有两个连接。
应该如何处理多个连接。
您可能没有在查询调用中指定连接处理程序。mssql(如 mysql)库默认使用最后打开的连接作为默认值。
所以,在伪代码中:
$con1 = mssql_connect("blah blah blah");
$result = mssql_query("SELECT blah blah blah");
$con2 = mssql_connect("blah blah blah"); <-- last opened, new default
$result2 = mssql_query("SELECT blah blah", $con1);
^^^^^---force using original connection
我从论坛帖子中找到了我自己的解决方案。
评论如下。我对它的理解是:如果两个数据库具有相同的主机和用户名 mssql connect 只是使用这些参数返回上一个连接。愚蠢,但这就是正在发生的事情。
使用相同参数多次调用 mysql_connect 只会导致创建一个资源/连接。一旦创建了第一个,对 mysql_connect 的后续调用将返回相同的连接。
调用 mysql_select_db 后,两个连接都将指向同一个数据库。在我的开发中,我通过在一个 mysql_connect 中使用 IP 作为服务器名,在第二个调用中使用 localhost 来解决这个问题。这创建了两个单独的连接,但限制了您可以在同一台服务器上使用的单独数据库的数量。
在一个脚本中,解决此问题的另一种方法是将数据库名称包含在 select 语句中,或者在 select 之前使用 mysql_select_db 在数据库之间切换。
我需要两个不同的连接,因为我不想在我的其他类中调用 mysql_select_db。