应用程序是PHP+MSSQL。在多个连接中错误更新。我有两个连接。
- 打开连接1
- 做一些过程
- 打开连接2。(注意:要打开connection2,我们需要connection1数据库。)
- 在连接2中进行一些更新
- 闭合连接2
- 在connection1中更新和插入进程。但是系统错误地更新到connection2数据库而不是connection1
应该如何处理多个连接。
您可能没有在查询调用中指定连接处理程序。mssql(类似于mysql)库默认使用LAST打开的连接作为默认连接。
因此,在伪代码中:
$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。