我是新手。我用PHP编写了大部分查询。我创建了一个连接对象,然后点击sql server。
function navigation($sel_subject, $sel_page,$filter=false) {
$subject_set = get_all_subjects();
$page_set = get_pages_for_subject($subject["id"],$sec_wp,$filter);
}
function get_all_subjects() {
global $connection;
$query = " SELECT * FROM subjects ORDER BY position ";
return odbc_exec($connection,$query);
}
现在我正在更新一些只需要从数据库中获取数据的简单查询。我正在升级到存储过程。
function get_all_subjects() { global $connection;
$query = " EXEC get_all_subjects ";
return odbc_exec($connection,$query); }
我收到错误消息。 连接忙于另一个hstmt ERROR
的结果我正在使用sql server 2005和ODBC连接器。
解决此问题的最佳方法是什么。或者,如果可以,请询问管理员是否更好 做http://sourceitsoftware.blogspot.com/2008/06/connection-is-busy-with-results-for.html之类的事情 Ottar Holstad说...... 当使用BDE通过ODBC连接到MS SQL Server时,可以(有时?)通过使用SQL Native Client而不是SQL Server Driver for ODBC来解决。
我想知道,激活MARS(多个活动结果集)会更好。如果是这样,请帮助我提供一步一步的程序来启用相同的程序。
答案 0 :(得分:4)
您必须启用默认情况下禁用的MARS(多个活动结果集)。您可以通过切换到“SQL Native Client”来避免此错误消息。有关详细信息check this
答案 1 :(得分:1)
当您完成odbc_free_result
的结果后,您可以尝试添加odbc_exec
来电吗?
答案 2 :(得分:0)
我推荐其他框架,例如
这些应该比odbc_更灵活和更先进。 odbc_exec倾向于返回服务器端游标,这不允许另一个查询在同一连接上运行。客户端游标一次性将所有数据作为静态快照传递给客户端,因此其他查询可以免费连接。
与odbc_保持一致,如果您需要另一个结果集,而第一个处于活动状态,您可以创建多个连接句柄并使用另一个句柄。
答案 3 :(得分:0)
我想说可能的解决方案有三个部分。
首先是更好地优化SQL语句。
尝试使用LIMIT语句并远离使用*并仅定义所需的字段。这两件事可以帮助减少SQL语句的内存负载。
其次,尝试更好地优化数据库表结构(即:减少Keyname / Index值等等。)如果您的数据库有任何大小(例如,50,000行或更大),可以尝试切换到InnoDB以防止行锁定。您还可以尝试从辅助(临时)数据库表执行一些表复制和查询,以减少主数据库的负载。显然,如果没有我们知道你的DB Schema,这只是我“在那里提出建议。”
第三,除非你遇到一个带有100万行的数据库并且你遇到了连接繁忙的错误,否则很可能你需要与你的托管服务提供商交谈。即使在共享服务器中,这些类型的错误消息(如果您的代码尽可能优化)几乎总是由于您的服务器没有足够的内存分配。
正如cyberkiwi所指出的,您可以尝试将ADOdb放入ftp并运行一个简单的循环,只是为了查看ADOdb的内部内存分配是否有用。它就像上传包含ADOdb的ADOdb并运行以下循环一样简单:
$Data = $connection->Execute("SELECT field1, field2, field2 FROM subjects ORDER BY position ASC LIMIT 0, 10");
if (is_object($Data)&&(!$Data->EOF))
{
while (!$Data->EOF)
{
//
// string, array, echo, whatever here
//
$Data->MoveNext();
}
}
unset($Data);
最后,虽然这些类型的错误是由于写入错误的SQL语句导致多个连接停止(在这种情况下要求增加“最大并发连接数”)或者仅仅是不够板载内存或php分配的内存(在这种情况下要求增加“memory_limit”)。